s3:smbXsrv_tcon: add smbXsrv_tcon_global_traverse()
[Samba.git] / source3 / configure.in
blob16d89f44d7c44d1cec11d52b0f54abe2b289f97d
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 dnl Checks for programs.
206 AC_ARG_ENABLE(smbtorture4,
207         [AS_HELP_STRING([--enable-smbtorture4], [Enable building smbtorture4 (default=auto)])])
209 if test x$enable_smbtorture4 != xno; then
210         smbtorture4_possible=yes
211 else
212         smbtorture4_possible=no
215 AC_PROG_INSTALL
216 AC_PROG_AWK
217 # Check for GNU make
218 m4_include(../m4/check_make.m4)
219 AC_SAMBA_GNU_MAKE([true], [true])
221 # Check for perl
222 m4_include(../m4/check_perl.m4)
223 AC_SAMBA_PERL([true], [smbtorture4_possible=no])
225 # Check for python
226 m4_include(../m4/check_python.m4)
227 AC_SAMBA_PYTHON_DEVEL([true], [smbtorture4_possible=no])
229 AC_CHECK_TOOL(AR, ar)
231 dnl Check if we (actually our C compiler!) use GNU ld
232 AC_PROG_LD_GNU
234 dnl Certain versions of GNU ld the default is not to have the
235 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
236 dnl warnings when building modules.
237 if test "$ac_cv_prog_gnu_ld" = "yes"; then
238         ac_cv_gnu_ld_version=`$CC -Wl,-v /dev/null 2>&1 < /dev/null | grep "GNU ld"`
239         AC_MSG_CHECKING(GNU ld release date)
240         changequote(,)dnl
241         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'`
242         changequote([,])dnl
243         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
244         if test -n "$ac_cv_gnu_ld_date"; then
245         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
246                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
247         fi
248         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
249                 ac_cv_gnu_ld_version_script=yes
250         fi
251         else
252            AC_MSG_CHECKING(GNU ld release version)
253            changequote(,)dnl
254            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'`
255            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
256            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
257            changequote([,])dnl
258            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
259            AC_MSG_CHECKING(GNU ld release version major)
260            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
261            AC_MSG_CHECKING(GNU ld release version minor)
262            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
263            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
264              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
265            fi
266            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
267              ac_cv_gnu_ld_version_script=yes
268            fi
269         fi
272 dnl Check if C compiler understands -c and -o at the same time
273 AC_PROG_CC_C_O
274 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
275       BROKEN_CC=
276 else
277       BROKEN_CC=#
279 AC_SUBST(BROKEN_CC)
281 dnl Check if the C compiler understands -Werror (GNU)
282 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
283  AC_TRY_RUN_STRICT([
284   int main(void)
285   {
286         return 0;
287   }],[$CFLAGS -Werror],[$CPPFLAGS],[$LDFLAGS],
288   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
289 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
290    Werror_FLAGS="-Werror"
291 else
292 dnl Check if the C compiler understands -w2
293 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
294  AC_TRY_RUN_STRICT([
295   int main(void)
296   {
297         return 0;
298   }],[$CFLAGS -w2],[$CPPFLAGS],[$LDFLAGS],
299   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
300 if test x"$samba_cv_HAVE_w2" = x"yes"; then
301    Werror_FLAGS="-w2"
302 else
303 dnl Check if the C compiler understands -errwarn (Sun)
304 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
305   AC_TRY_RUN_STRICT([
306    int main(void)
307    {
308         return 0;
309    }],[$CFLAGS -errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
310    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
311 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
312    Werror_FLAGS="-errwarn=%all"
313 else
314 dnl Check if the C compiler understands -qhalt (IBM)
315 AC_CACHE_CHECK([that the C compiler understands -qhalt],samba_cv_HAVE_qhalt, [
316   AC_TRY_RUN_STRICT([
317    int main(void)
318    {
319         return 0;
320    }],[$CFLAGS -qhalt=w],[$CPPFLAGS],[$LDFLAGS],
321    samba_cv_HAVE_qhalt=yes,samba_cv_HAVE_qhalt=no,samba_cv_HAVE_qhalt=cross)])
322 if test x"$samba_cv_HAVE_qhalt" = x"yes"; then
323    Werror_FLAGS="-qhalt=w"
329 ############################################
330 # check if the compiler can handle negative enum values
331 # and don't truncate the values to INT_MAX
332 # a runtime test is needed here
333 AC_SUBST(PIDL_ARGS)
334 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
335     AC_TRY_RUN(
337         #include <stdio.h>
338         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
339         int main(void) {
340                 enum negative_values v1 = NEGATIVE_VALUE;
341                 unsigned v2 = NEGATIVE_VALUE;
343                 if (v1 != 0xFFFFFFFF) {
344                         printf("%u != 0xFFFFFFFF\n", v1);
345                         return 1;
346                 }
347                 if (v2 != 0xFFFFFFFF) {
348                         printf("%u != 0xFFFFFFFF\n", v2);
349                         return 1;
350                 }
352                 return 0;
353         }
355         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv_CC_NEGATIVE_ENUM_VALUES=no)])
356 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
357         AC_MSG_WARN([using --uint-enums for pidl])
358         PIDL_ARGS="$PIDL_ARGS --uint-enums"
361 dnl Figure out the flags to support named structure initializers
363 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
365 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
366 AC_MSG_CHECKING(uname -s)
367 AC_MSG_RESULT(${UNAME_S})
369 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
370 AC_MSG_CHECKING(uname -r)
371 AC_MSG_RESULT(${UNAME_R})
373 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
374 AC_MSG_CHECKING(uname -m)
375 AC_MSG_RESULT(${UNAME_M})
377 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
378 AC_MSG_CHECKING(uname -p)
379 AC_MSG_RESULT(${UNAME_P})
381 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
382 AC_MSG_CHECKING(uname -i)
383 AC_MSG_RESULT(${UNAME_I})
385 dnl Add #include for broken IRIX header files
386   case "$host_os" in
387         *irix6*)
388                 #TODO add to libreplace
389                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
390                         dnl Fix sensible defaults for MIPSPro compilers. The
391                         dnl error numbers are valid for the 7.3 compilers,
392                         dnl hopefully also valid for the 7.4 series.
393                         dnl
394                         dnl Bugzilla 3801. Force an error on warning 1035
395                         dnl so we don't incorrectly detect stdint.h. This
396                         dnl warning is emitted for #error directives.
397                         CFLAGS="$CFLAGS -diag_error 1035"
398                         dnl 1209: Controlling expression is constant
399                         dnl 1174: Function foo declared but never referenced
400                         dnl 3201: Parameter foo was never referenced
401                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
402                 fi
403         ;;
404 esac
406 DYNEXP=
407 AC_SUBST(DYNEXP)
408 LDSHFLAGS_Z_DEFS=
409 AC_SUBST(LDSHFLAGS_Z_DEFS)
410 LDSHFLAGS_Z_NODEFS=
411 AC_SUBST(LDSHFLAGS_Z_NODEFS)
413 dnl Add modules that have to be built by default here
414 dnl These have to be built static:
415 default_static_modules=""
416 default_static_modules="$default_static_modules pdb_smbpasswd"
417 default_static_modules="$default_static_modules pdb_tdbsam"
418 default_static_modules="$default_static_modules pdb_wbc_sam"
419 default_static_modules="$default_static_modules rpc_lsarpc"
420 default_static_modules="$default_static_modules rpc_samr"
421 default_static_modules="$default_static_modules rpc_winreg"
422 default_static_modules="$default_static_modules rpc_initshutdown"
423 default_static_modules="$default_static_modules rpc_dssetup"
424 default_static_modules="$default_static_modules rpc_wkssvc"
425 default_static_modules="$default_static_modules rpc_svcctl"
426 default_static_modules="$default_static_modules rpc_ntsvcs"
427 default_static_modules="$default_static_modules rpc_netlogon"
428 default_static_modules="$default_static_modules rpc_netdfs"
429 default_static_modules="$default_static_modules rpc_srvsvc"
430 default_static_modules="$default_static_modules rpc_spoolss"
431 default_static_modules="$default_static_modules rpc_eventlog"
432 default_static_modules="$default_static_modules auth_sam"
433 default_static_modules="$default_static_modules auth_unix"
434 default_static_modules="$default_static_modules auth_winbind"
435 default_static_modules="$default_static_modules auth_wbc"
436 default_static_modules="$default_static_modules auth_domain"
437 default_static_modules="$default_static_modules auth_builtin"
438 default_static_modules="$default_static_modules vfs_default"
439 default_static_modules="$default_static_modules nss_info_template"
441 dnl These are preferably build shared, and static if dlopen() is not available
442 default_shared_modules=""
443 default_shared_modules="$default_shared_modules vfs_recycle"
444 default_shared_modules="$default_shared_modules vfs_audit"
445 default_shared_modules="$default_shared_modules vfs_extd_audit"
446 default_shared_modules="$default_shared_modules vfs_full_audit"
447 default_shared_modules="$default_shared_modules vfs_netatalk"
448 default_shared_modules="$default_shared_modules vfs_fake_perms"
449 default_shared_modules="$default_shared_modules vfs_default_quota"
450 default_shared_modules="$default_shared_modules vfs_readonly"
451 default_shared_modules="$default_shared_modules vfs_cap"
452 default_shared_modules="$default_shared_modules vfs_expand_msdfs"
453 default_shared_modules="$default_shared_modules vfs_shadow_copy"
454 default_shared_modules="$default_shared_modules vfs_shadow_copy2"
455 default_shared_modules="$default_shared_modules auth_script"
456 default_shared_modules="$default_shared_modules vfs_readahead"
457 default_shared_modules="$default_shared_modules vfs_xattr_tdb"
458 default_shared_modules="$default_shared_modules vfs_streams_xattr"
459 default_shared_modules="$default_shared_modules vfs_streams_depot"
460 default_shared_modules="$default_shared_modules vfs_acl_xattr"
461 default_shared_modules="$default_shared_modules vfs_acl_tdb"
462 default_shared_modules="$default_shared_modules vfs_smb_traffic_analyzer"
463 default_shared_modules="$default_shared_modules vfs_preopen"
464 default_shared_modules="$default_shared_modules vfs_catia"
465 default_shared_modules="$default_shared_modules vfs_scannedonly"
466 default_shared_modules="$default_shared_modules vfs_crossrename"
467 default_shared_modules="$default_shared_modules vfs_linux_xfs_sgid"
468 default_shared_modules="$default_shared_modules vfs_time_audit"
469 default_shared_modules="$default_shared_modules vfs_media_harmony"
470 default_shared_modules="$default_shared_modules idmap_autorid"
471 default_shared_modules="$default_shared_modules idmap_tdb2"
472 default_shared_modules="$default_shared_modules idmap_rid"
473 default_shared_modules="$default_shared_modules idmap_hash"
475 if test "x$developer" = xyes; then
476    default_shared_modules="$default_shared_modules perfcount_test"
479 if test x"$selftest" = x"yes" -o "x$developer" = xyes; then
480    default_shared_modules="$default_shared_modules vfs_fake_acls"
484 # Config CPPFLAG settings for strange OS's that must be set
485 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
486 # case statement; its first reference must be unconditional.
488 case "$host_os" in
489     *hpux*)
491 # Defines needed for HPUX support.
492 # HPUX has bigcrypt but (sometimes?) doesn't use it for
493 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
495       case `uname -r` in
496                 *9*|*10*|*11)
497                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
498                 ;;
499       esac
500       ;;
503 # AIX4.x doesn't even admit to having large
504 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
506     *aix4*)
507           AC_MSG_RESULT([enabling large file support])
508           CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
509           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
510       ;;
512 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
513 # to the existance of large files..
515 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
517         *solaris*)
518                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
519                 LDFLAGS="$LDFLAGS -lthread"
520                 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
521                 ;;
523 # IRIX uses SYSV printing.  Make sure to set that here
525         *irix*)
526                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
527                 ;;
528         *freebsd*|*dragonfly*)
529                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
530                 ;;
532 # VOS may need to have POSIX support and System V compatibility enabled.
534     *vos*)
535     case "$CPPFLAGS" in
536           *-D_POSIX_C_SOURCE*)
537                 ;;
538           *)
539                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
540                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
541                 ;;
542     esac
543     case "$CPPFLAGS" in
544           *-D_SYSV*|*-D_SVID_SOURCE*)
545                 ;;
546           *)
547                 CPPFLAGS="$CPPFLAGS -D_SYSV"
548                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
549     esac
550     ;;
551 # GNU systems
553     *linux* | *hurd* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
554         CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
555         AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
556         ;;
559 # MacOS X is the *only* system that uses compose character in utf8. This
560 # is so horribly broken....
562     *darwin*)
563         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
565 # Add a system specific charset module.
566         default_shared_modules="$default_shared_modules"
568         ;;
569     *qnx*)
570         ;;
572 esac
574 SAVE_CPPFLAGS="${CPPFLAGS}"
575 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
577 AC_LIBREPLACE_BROKEN_CHECKS
578 AC_CHECK_FUNCS([syslog],[],[AC_MSG_ERROR([Required function not found])])
579 AC_LIBREPLACE_NETWORK_CHECKS
581 CPPFLAGS="${SAVE_CPPFLAGS}"
583 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
585 LIBREPLACE_OBJS="${LIBREPLACEOBJ}"
586 AC_SUBST(LIBREPLACE_OBJS)
588 LIBREPLACE_LIBS="${LIBREPLACE_NETWORK_LIBS} ${LIBREPLACE_FILESYS_LIBS}"
589 AC_SUBST(LIBREPLACE_LIBS)
592 # add -ldl to the global LIBS
593 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
594 AUTH_LIBS="${AUTH_LIBS} ${CRYPT_LIBS}"
597 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
598 AC_CHECK_HEADERS(unistd.h grp.h sys/id.h memory.h alloca.h)
599 AC_CHECK_HEADERS(limits.h float.h libintl.h)
600 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
601 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)
602 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
603 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
604 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
605 AC_CHECK_HEADERS(sys/sysmacros.h)
606 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
607 AC_CHECK_HEADERS(langinfo.h locale.h)
608 AC_CHECK_HEADERS(xfs/libxfs.h)
609 AC_CHECK_HEADERS(netgroup.h)
610 AC_CHECK_HEADERS(linux/falloc.h)
611 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
613 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
614 #if HAVE_RPC_RPC_H
615 #include <rpc/rpc.h>
616 #endif
618 CRYPTO_MD5_OBJ=
619 if test "x$ac_cv_header_CommonCrypto_CommonDigest_h" != "xyes"
620 then
621         CRYPTO_MD5_OBJ="../lib/crypto/md5.o"
623 AC_SUBST(CRYPTO_MD5_OBJ)
625 ## These fail to compile on IRIX so just check for their presence
626 AC_CHECK_HEADERS(sys/mode.h,,,)
628 # Look for Darwin headers
629 old_CPPFLAGS="$CPPFLAGS"
630 CPPFLAGS="-Iinclude $CPPFLAGS"
631 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
632 CPPFLAGS="$old_CPPFLAGS"
634 # To link lib/util/charset/charset_macosxfs.c, we need to tell the linker
635 # about CoreFoundation, at least on os X 10.4..10.7 resp. darwin8..12
636 case "$host_os" in
637     *darwin*)
638                 LDFLAGS="$LDFLAGS -framework CoreFoundation"
639         ;;
640 esac
642 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
643 # subdirectory of headers.
644 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
646 if test x"$enable_developer" = x"yes" ; then
647    if test x"$ac_cv_header_valgrind_h" = xyes -o \
648            x"$ac_cv_header_valgrind_valgrind_h" = xyes ; then
649       AC_DEFINE(VALGRIND,1,[Whether we have valgrind headers])
650    fi
654 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
655 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
657 case "$host_os" in
658     *hpux*)
659                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
660                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
661                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
662                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
663                 fi
664         ;;
665 esac
666 AC_CHECK_HEADERS(shadow.h)
667 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
668 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
670 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
672 # For experimental utmp support (lastlog on some BSD-like systems)
673 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
675 AC_CHECK_SIZEOF(int,cross)
676 AC_CHECK_SIZEOF(long,cross)
677 AC_CHECK_SIZEOF(long long,cross)
678 AC_CHECK_SIZEOF(short,cross)
680 AC_C_CONST
681 AC_C_INLINE
682 AC_C_BIGENDIAN
683 AC_C_CHAR_UNSIGNED
685 AC_TYPE_SIGNAL
686 AC_TYPE_UID_T
687 AC_TYPE_MODE_T
688 AC_TYPE_OFF_T
689 AC_TYPE_SIZE_T
690 AC_TYPE_PID_T
691 AC_STRUCT_ST_RDEV
692 AC_DIRENT_D_OFF
693 AC_CHECK_TYPE(ssize_t, int)
694 AC_CHECK_TYPE(wchar_t, unsigned short)
696 ############################################
697 # for cups support we need libcups, and a handful of header files
699 AC_ARG_ENABLE(cups,
700 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
702 if test x$enable_cups != xno; then
703         AC_PATH_PROG(CUPS_CONFIG, cups-config)
705         if test "x$CUPS_CONFIG" != x; then
707                 ac_save_LDFLAGS=$LDFLAGS
708                 ac_save_PRINT_LIBS=$PRINT_LIBS
709                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
711                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
712                         x"$ac_cv_header_cups_language_h" = xyes; then
713                         # try linking with -lcups alone first. That should work unless libcups is
714                         # underlinked. With cups-config --libs we pull in unwanted and unneeded
715                         # dendencies including thread libraries - use cups-config only if really
716                         # required. 
717                         AC_CHECK_LIB_EXT(cups, ac_save_PRINT_LIBS , httpConnect,
718                                 [PRINT_LIBS="$ac_save_PRINT_LIBS -lcups"],
719                                 [AC_MSG_WARN([your cups library doesn't link with -lcups alone, it might be underlinked.]) ;
720                                  PRINT_LIBS="$ac_save_PRINT_LIBS `$CUPS_CONFIG --libs`"])
722                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
723                         samba_cv_HAVE_CUPS=yes
724                         AC_CHECK_LIB_EXT(cups, PRINT_LIBS, httpConnectEncrypt)
725                 else
726                         AC_MSG_WARN([cups-config around but cups-devel not installed])
727                         CFLAGS=$ac_save_CFLAGS
728                         LDFLAGS=$ac_save_LDFLAGS
729                         PRINT_LIBS=$ac_save_PRINT_LIBS
730                 fi
732         elif test x"$enable_cups" = x"yes"; then
733                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
734         fi
737 AC_ARG_ENABLE(iprint,
738 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
740 if test x$enable_iprint != xno; then
741         if test x"$samba_cv_HAVE_CUPS" = xyes; then
742                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
743         elif test x"$enable_iprint" = x"yes"; then
744                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
745         fi
748 ############################################
749 # check if the compiler will optimize out function calls
750 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
751     AC_TRY_LINK([
752 #include <stdio.h>],
754                 if (0) {
755                    this_function_does_not_exist();
756                 } else {
757                   return 1;
758                 }
761         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
762 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
763    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
766 #############################################
767 # check for fd passing struct via msg_control
768 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
769     AC_TRY_COMPILE([
770 #include <sys/types.h>
771 #include <stdlib.h>
772 #include <stddef.h>
773 #include <sys/socket.h>
774 #include <sys/un.h>],
776         struct msghdr msg;
777         union {
778               struct cmsghdr cm;
779               char control[CMSG_SPACE(sizeof(int))];
780         } control_un;
781         msg.msg_control = control_un.control;
782         msg.msg_controllen = sizeof(control_un.control);
784         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
785 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
786    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
787              [If we can use msg_control for passing file descriptors])
790 #############################################
791 # check for fd passing struct via msg_acctrights
792 AC_CACHE_CHECK([for fd passing via msg_acctrights],
793                 samba_cv_msghdr_msg_acctrights, [
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         int fd;
803         msg.msg_acctrights = (caddr_t) &fd;
804         msg.msg_acctrightslen = sizeof(fd);
806         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
807 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
808    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
809              [If we can use msg_acctrights for passing file descriptors])
812 AC_CHECK_FUNCS(dirfd)
813 if test x"$ac_cv_func_dirfd" = x"yes"; then
814         default_shared_modules="$default_shared_modules vfs_syncops vfs_dirsort"
817 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
818     AC_TRY_COMPILE([
819 #include <sys/types.h>
820 #if STDC_HEADERS
821 #include <stdlib.h>
822 #include <stddef.h>
823 #endif
824 #include <signal.h>],[struct sigevent s;],
825         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
826 if test x"$samba_cv_struct_sigevent" = x"yes"; then
827    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
828    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
829         [#include <signal.h>])
832 # and glibc has setresuid under linux but the function does
833 # nothing until kernel 2.1.44! very dumb.
834 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
835     AC_TRY_RUN([#include <errno.h>
836 main() { setresuid(1,1,1); setresuid(2,2,2); return(errno==EPERM?0:1);}],
837         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
838 if test x"$samba_cv_have_setresuid" = x"yes"; then
839     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
842 # Do the same check for setresguid...
844 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
845     AC_TRY_RUN([#include <unistd.h>
846 #include <errno.h>
847 main() { errno = 0; setresgid(1,1,1); return(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
848         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
849 if test x"$samba_cv_have_setresgid" = x"yes"; then
850     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
853 AC_FUNC_MEMCMP
855 ###############################################
856 # Readline included by default unless explicitly asked not to
857 test "${with_readline+set}" != "set" && with_readline=yes
859 # test for where we get readline() from
860 AC_MSG_CHECKING(whether to use readline)
861 AC_ARG_WITH(readline,
862 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
863 [  case "$with_readline" in
864   yes)
865     AC_MSG_RESULT(yes)
867     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
868     AC_CHECK_HEADERS(readline/history.h)
870     AC_CHECK_HEADERS(readline.h readline/readline.h,[
871       for termlib in ncurses curses termcap terminfo termlib tinfo; do
872        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
873       done
874       AC_CHECK_LIB(readline, rl_callback_handler_install,
875        [TERMLIBS="-lreadline $TERMLIBS"
876        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
877        break], [TERMLIBS=], $TERMLIBS)])
878     ;;
879   no)
880     AC_MSG_RESULT(no)
881     ;;
882   *)
883     AC_MSG_RESULT(yes)
885     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
886     # alternate readline path
887     _ldflags=${LDFLAGS}
888     _cppflags=${CPPFLAGS}
890     # Add additional search path
891     LDFLAGS="-L$with_readline/lib $LDFLAGS"
892     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
894     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
895     AC_CHECK_HEADERS(readline/history.h)
897     AC_CHECK_HEADERS(readline.h readline/readline.h,[
898       for termlib in ncurses curses termcap terminfo termlib; do
899        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
900       done
901       AC_CHECK_LIB(readline, rl_callback_handler_install,
902        [TERMLDFLAGS="-L$with_readline/lib"
903        TERMCPPFLAGS="-I$with_readline/include"
904        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
905        TERMLIBS="-lreadline $TERMLIBS"
906        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
907        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
909     LDFLAGS=$_ldflags
910     ;;
911   esac],
912   AC_MSG_RESULT(no)
914 AC_SUBST(TERMLIBS)
915 AC_SUBST(TERMLDFLAGS)
917 # The readline API changed slightly from readline3 to readline4, so
918 # code will generate warnings on one of them unless we have a few
919 # special cases.
920 AC_CHECK_LIB(readline, rl_completion_matches,
921              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
922                         [Do we have rl_completion_matches?])],
923              [],
924              [$TERMLIBS])
926 # not all readline libs have rl_event_hook or history_list
927 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
928 AC_CHECK_LIB(readline, history_list,
929              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
930              [],
931              [$TERMLIBS])
933 ###############################################
934 # test for where we get yp_get_default_domain() from
935 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
936 AC_CHECK_FUNCS(yp_get_default_domain)
938 # Check if we have execl, if not we need to compile smbrun.
939 AC_CHECK_FUNCS(execl)
940 if test x"$ac_cv_func_execl" = x"no"; then
941     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun"
944 AC_CHECK_FUNCS(getcwd fchown chmod fchmod mknod mknod64)
945 AC_CHECK_FUNCS(strtol)
946 AC_CHECK_FUNCS(strchr chflags)
947 AC_CHECK_FUNCS(getrlimit fsync setpgid)
948 AC_CHECK_FUNCS(fdatasync,,[AC_CHECK_LIB_EXT(rt, LIBS, fdatasync)])
949 AC_CHECK_FUNCS(setsid glob strpbrk crypt16 getauthuid)
950 AC_CHECK_FUNCS(sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
951 AC_CHECK_FUNCS(initgroups select rdchk getgrnam getgrent pathconf)
952 AC_CHECK_FUNCS(getgrset)
953 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups syscall sysconf)
954 AC_CHECK_FUNCS(atexit grantpt posix_fallocate)
955 AC_CHECK_FUNCS(fallocate)
956 AC_CHECK_FUNCS(fseeko setluid getpwanam)
957 AC_CHECK_FUNCS(fdopendir)
958 AC_CHECK_FUNCS(getpwent_r)
959 AC_CHECK_FUNCS(setenv strcasecmp fcvt fcvtl)
960 AC_CHECK_FUNCS(syslog vsyslog timegm)
961 AC_CHECK_FUNCS(setlocale)
962 AC_CHECK_FUNCS(nanosleep,,[AC_CHECK_LIB_EXT(rt, LIBS, nanosleep)])
963 AC_CHECK_FUNCS(lutimes futimes utimensat futimens)
964 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
965 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
966 AC_CHECK_HEADERS(sys/mman.h)
967 # setbuffer, shmget, shm_open are needed for smbtorture
968 AC_CHECK_FUNCS(shmget shm_open)
969 AC_CHECK_FUNCS(gettext dgettext)
970 AC_CHECK_FUNCS(bindtextdomain textdomain bind_textdomain_codeset)
971 AC_CHECK_FUNCS(strupr)
973 # Find a method of generating a stack trace
974 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
975 # libexecinfo provides backtrace_symbols on FreeBSD
976 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
977 AC_CHECK_FUNCS(backtrace_symbols)
978 AC_CHECK_LIB(exc, trace_back_stack)
980 # check for sysctlbyname and sysctl for BSD systems
981 AC_CHECK_FUNCS(sysctlbyname)
982 AC_CHECK_FUNCS(sysctl)
984 #################################################
985 # Check to see if core dump directory is defined in linux
986 # with /proc/sys/kernel/core_pattern
988 AC_CHECK_FILE([/proc/sys/kernel/core_pattern],
989         AC_DEFINE(HAVE_SYS_KERNEL_PROC_CORE_PATTERN, 1,
990         [Whether Linux kernel uses core_pattern for core files]),
991          [])
993 #############################
994 # check if building with gpfs
995 AC_CHECK_HEADERS(gpfs_gpl.h)
996 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
997     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL headers are available])
998     default_shared_modules="$default_shared_modules vfs_gpfs"
1001 # Note that all the libunwind symbols in the API are defined to internal
1002 # platform-specific version, so we must include libunwind.h before checking
1003 # any of them.
1004 AC_MSG_CHECKING([for libunwind])
1005 save_LIBS=$LIBS
1007 UNWIND_ARCH="unknown"
1008 if test x"$UNAME_I" != x"unknown"; then
1009         UNWIND_ARCH="$UNAME_I"
1010 elif test x"$UNAME_M" != x"unknown"; then
1011         UNWIND_ARCH="$UNAME_M"
1012 elif test x"$UNAME_P" != x"unknown"; then
1013         UNWIND_ARCH="$UNAME_P"
1016 case "$UNWIND_ARCH" in
1017         unknown)
1018                 # This probably won't link without
1019                 # the platform-specific libunwind.
1020                 LIBS="$LIBS -lunwind"
1021                 ;;
1022         i386|i586|i686)
1023                 # Add the platform-specific libunwind module.
1024                 LIBS="$LIBS -lunwind -lunwind-x86"
1025                 ;;
1026         *)
1027                 # Add the platform-specific libunwind module.
1028                 # based on uname -i, uname -m or uname -p
1029                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1030                 ;;
1031 esac
1033 AC_TRY_LINK(
1034     [
1035 #ifdef HAVE_LIBUNWIND_H
1036 #include <libunwind.h>
1037 #endif
1038     ],
1039     [
1040         unw_context_t ctx; unw_cursor_t cur;
1041         char buf[256]; unw_word_t off;
1042         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1043         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1044     ],
1045     [
1046         AC_MSG_RESULT(yes)
1047         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1049         # If we have libunwind, test whether we also have libunwind-ptrace
1050         # which would let us unwind arbitrary processes.
1051         save_LIBS=$LIBS
1052         AC_CHECK_HEADERS(libunwind-ptrace.h)
1053         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1054             [
1055                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1056                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1057                     [Whether libunwind-ptrace.a is available.])
1058             ],
1059             [ LIBUNWIND_PTRACE="" ])
1061         LIBS=$save_LIBS
1062     ],
1063     [
1064         AC_MSG_RESULT(no)
1065         LIBS=$save_LIBS
1066     ])
1068 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1069 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1070     AC_CHECK_HEADERS(sys/ptrace.h)
1071     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1072     AC_TRY_LINK(
1073             [
1074 #if HAVE_SYS_TYPES_H
1075 #include <sys/types.h>
1076 #endif
1077 #if HAVE_SYS_PTRACE_H
1078 #include <sys/ptrace.h>
1079 #endif
1080             ],
1081             [
1082                 pid_t me = (pid_t)-1;
1083                 ptrace(PTRACE_ATTACH, me, 0, 0);
1084                 ptrace(PTRACE_DETACH, me, 0, 0);
1085                 return 0;
1086             ],
1087             [
1088                 AC_MSG_RESULT(yes)
1089                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1090                     [Whether the Linux ptrace(2) interface is available.])
1091             ],
1092             [
1093                 AC_MSG_RESULT(no)
1094                 LIBUNWIND_PTRACE=""
1095             ])
1098 AC_SUBST(LIBUNWIND_PTRACE)
1100 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1101 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1102 AC_CHECK_FUNCS(__getcwd _getcwd)
1103 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1104 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1105 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1106 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1107 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1108 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1109 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek)
1110 AC_CHECK_FUNCS(pread _pread __pread)
1111 AC_CHECK_FUNCS(pwrite _pwrite __pwrite)
1112 AC_CHECK_FUNCS(prctl)
1114 AC_TRY_COMPILE([
1115 #ifdef HAVE_SYS_PRCTL_H
1116 #include <sys/prctl.h>
1117 #endif
1119 [int i; i = prtcl(0); ],
1120 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1125 case "$host_os" in
1126     *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1127        # glibc <= 2.3.2 has a broken getgrouplist
1128        AC_CACHE_CHECK([for good getgrouplist],samba_cv_linux_getgrouplist_ok,[AC_TRY_RUN([
1129 #include <unistd.h>
1130 #include <sys/utsname.h>
1131 main() {
1132        /* glibc up to 2.3 has a broken getgrouplist */
1133 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1134        int libc_major = __GLIBC__;
1135        int libc_minor = __GLIBC_MINOR__;
1137        if (libc_major < 2)
1138               return(1);
1139        if ((libc_major == 2) && (libc_minor <= 3))
1140               return(1);
1141 #endif
1142        return(0);
1144 ], [samba_cv_linux_getgrouplist_ok=yes],
1145    [samba_cv_linux_getgrouplist_ok=no],
1146    [samba_cv_linux_getgrouplist_ok=cross])])
1147        if test x"$samba_cv_linux_getgrouplist_ok" = x"yes"; then
1148           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1149        fi
1150        ;;
1151     *)
1152        AC_CHECK_FUNCS(getgrouplist)
1153        ;;
1154 esac
1156 #################################################
1157 # Check whether struct stat has timestamps with sub-second resolution.
1160 samba_cv_stat_hires=no
1161 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec], # Linux, Solaris
1162         [samba_cv_stat_hires=yes])
1163 AC_CHECK_MEMBERS([struct stat.st_mtimensec], # BSD, if defined _POSIX_SOURCE
1164         [samba_cv_stat_hires=yes])
1165 AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec], # BSD, if not defined _POSIX_SOURCE
1166         [samba_cv_stat_hires=yes])
1167 AC_CHECK_MEMBERS([struct stat.st_mtime_n], # AIX
1168         [samba_cv_stat_hires=yes])
1169 AC_CHECK_MEMBERS([struct stat.st_umtime], # Tru64
1170         [samba_cv_stat_hires=yes])
1172 if test x"$samba_cv_stat_hires" = x"yes" ; then
1173     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1174             [whether struct stat has sub-second timestamps])
1177 # recent FreeBSD, NetBSD have creation timestamps called birthtime:
1178 AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec])
1179 AC_CHECK_MEMBERS([struct stat.st_birthtime], AC_CHECK_MEMBERS([struct stat.st_birthtimensec]))
1182 AC_CACHE_CHECK([whether there is DOS flags support in the stat struct], samba_cv_stat_dos_flags,
1183     [
1184         AC_TRY_COMPILE(
1185             [#include <sys/stat.h>],
1186             [
1187                 int a = UF_DOS_ARCHIVE;
1188                 int h = UF_DOS_HIDDEN;
1189                 int r = UF_DOS_RO;
1190                 int s = UF_DOS_SYSTEM;
1191                 int i = UF_DOS_NOINDEX;
1192                 int f = UF_DOS_FLAGS;
1193             ],
1194             samba_cv_stat_dos_flags=yes, samba_cv_stat_dos_flags=no)
1195     ])
1197 if test x"$samba_cv_stat_dos_flags" = x"yes" ; then
1198     AC_DEFINE(HAVE_STAT_DOS_FLAGS, 1, [whether there is DOS flags support in the stat struct])
1201 AC_CACHE_CHECK([whether we can compile with __attribute__((destructor))],
1202                samba_cv_function_attribute_destructor,
1203                [
1204                  AC_COMPILE_IFELSE([AC_LANG_SOURCE(
1205                         [
1206                                 __attribute__((destructor))
1207                                 static void cleanup(void) { }
1208                         ])],
1209                         samba_cv_function_attribute_destructor=yes)
1210                 ])
1212 if test x"$samba_cv_function_attribute_destructor" = xyes ; then
1213    AC_DEFINE(HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR, 1,
1214              [whether we can compile with __attribute__((destructor))])
1217 #####################################
1218 # needed for SRV lookups
1219 AC_CHECK_LIB(resolv, dn_expand)
1220 AC_CHECK_LIB(resolv, _dn_expand)
1221 AC_CHECK_LIB(resolv, __dn_expand)
1224 # Check for the functions putprpwnam, set_auth_parameters,
1225 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1226 # Needed for OSF1 and HPUX.
1229 AC_LIBTESTFUNC(security, putprpwnam)
1230 AC_LIBTESTFUNC(sec, putprpwnam)
1232 AC_LIBTESTFUNC(security, set_auth_parameters)
1233 AC_LIBTESTFUNC(sec, set_auth_parameters)
1235 # UnixWare 7.x has its getspnam in -lgen
1236 AC_LIBTESTFUNC(gen, getspnam)
1238 AC_LIBTESTFUNC(security, getspnam)
1239 AC_LIBTESTFUNC(sec, getspnam)
1241 AC_LIBTESTFUNC(security, bigcrypt)
1242 AC_LIBTESTFUNC(sec, bigcrypt)
1244 AC_LIBTESTFUNC(security, getprpwnam)
1245 AC_LIBTESTFUNC(sec, getprpwnam)
1247 AC_CHECK_FUNCS(strsignal)
1249 AC_DISABLE_STATIC
1250 AC_ENABLE_SHARED
1252 # Set defaults
1253 PIE_CFLAGS=""
1254 PIE_LDFLAGS=""
1255 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1257 if test "x$enable_pie" != xno
1258 then
1259         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1260         [
1261                 cat > conftest.c <<EOF
1262 int foo;
1263 int main () { return 0;}
1265                 if AC_TRY_COMMAND_NO_STDERR([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c])
1266                 then
1267                         samba_cv_fpie=yes
1268                 else
1269                         samba_cv_fpie=no
1270                 fi
1271                 rm -f conftest*
1272         ])
1273         if test x"${samba_cv_fpie}" = x"yes"
1274         then
1275                 PIE_CFLAGS="-fPIE"
1276                 PIE_LDFLAGS="-pie"
1277         fi
1280 # Set defaults
1281 RELRO_LDFLAGS=""
1282 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1284 if test "x$enable_relro" != xno
1285 then
1286         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1287         [
1288                 cat > conftest.c <<EOF
1289 int foo;
1290 main () { return 0;}
1292                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1293                 then
1294                         samba_cv_relro=yes
1295                 else
1296                         samba_cv_relro=no
1297                 fi
1298                 rm -f conftest*
1299         ])
1300         if test x"${samba_cv_relro}" = x"yes"
1301         then
1302                 RELRO_LDFLAGS="-Wl,-z,relro"
1303         fi
1306 # Set defaults
1307 SYMSEXT="syms"
1308 AC_SUBST(SYMSEXT)
1310 # Assume non-shared by default and override below
1311 BLDSHARED="false"
1313 # these are the defaults, good for lots of systems
1314 HOST_OS="$host_os"
1315 LDSHFLAGS="-shared"
1316 MODULE_EXPORTS=""
1317 SONAMEFLAG="#"
1318 SHLD="\${CC} \${CFLAGS}"
1319 PICFLAG="${PIE_CFLAGS}"
1320 SHLIBEXT="so"
1321 DSO_EXPORTS=""
1323 # this bit needs to be modified for each OS that supports share libs
1324 # You need to specify how to create a shared library and
1325   # how to compile C code to produce PIC object files
1327   AC_MSG_CHECKING([ability to build shared libraries])
1329   # and these are for particular systems
1330   case "$host_os" in
1331                 *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu | *qnx*)
1332                         case "$host_os" in
1333                                 *linux*) AC_DEFINE(LINUX,1,[Whether the host os is linux]) ;;
1334                                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx]) ;;
1335                         esac
1336                         BLDSHARED="true"
1337                         LDSHFLAGS="-shared -Wl,-Bsymbolic"
1338                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1339                                 LDSHFLAGS_Z_NODEFS="-Wl,--allow-shlib-undefined"
1340                         fi
1341                         DYNEXP="-Wl,--export-dynamic"
1342                         PICFLAG="-fPIC"
1343                         SONAMEFLAG="-Wl,-soname="
1344                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1345                         ;;
1346                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1347                         BLDSHARED="true"
1348                         if test "${GCC}" = "yes"; then
1349                                 PICFLAG="-fPIC"
1350                                 SONAMEFLAG="-Wl,-soname="
1351                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1352                                         DYNEXP="-Wl,-E"
1353                                 fi
1354                                 LDSHFLAGS="-shared"
1355                         else
1356                                 PICFLAG="-KPIC"
1357                                 LDSHFLAGS="-G"
1358                         fi
1359                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1360                                 SONAMEFLAG="-Wl,-soname="
1361                         else
1362                                 SONAMEFLAG="-Wl,-h,"
1363                         fi
1364                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1365                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1366                         ;;
1367                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1368                         BLDSHARED="true"
1369                         LDSHFLAGS="-G"
1370                         SONAMEFLAG="-Wl,-h,"
1371                         PICFLAG="-KPIC"   # Is this correct for SunOS
1372                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1373                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1374                         ;;
1375                 *netbsd* | *freebsd* | *dragonfly* )
1376                         BLDSHARED="true"
1377                         LDSHFLAGS="-shared"
1378                         DYNEXP="-Wl,--export-dynamic"
1379                         SONAMEFLAG="-Wl,-soname,"
1380                         PICFLAG="-fPIC -DPIC"
1381                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1382                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1383                         ;;
1384                 *openbsd*)  BLDSHARED="true"
1385                         LDSHFLAGS="-shared"
1386                         DYNEXP="-Wl,-Bdynamic"
1387                         SONAMEFLAG="-Wl,-soname,"
1388                         PICFLAG="-fPIC"
1389                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1390                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1391                         ;;
1392                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1393                         case "$host_os" in
1394                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1395                         ;;
1396                         esac
1397                         BLDSHARED="true"
1398                         LDSHFLAGS="-Wl,-set_version,sgi1.0 -shared"
1399                         SONAMEFLAG="-Wl,-soname,"
1400                         if test "${GCC}" = "yes"; then
1401                                 PICFLAG="-fPIC"
1402                         else
1403                                 PICFLAG="-KPIC"
1404                         fi
1405                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1406                         ;;
1407                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1408                         BLDSHARED="true"
1409                         # use expfull to export underscored symbols
1410                         # add rtl to remove /lib/crt0.o warning
1411                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1412                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1413                         PICFLAG="-O2"
1414                         # as AIX code is always position independent...
1415                         # .po will just create compile warnings, use po.o:
1416                         if test "${GCC}" != "yes"; then
1417                                 ## for funky AIX compiler using strncpy()
1418                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000 -qhalt=e"
1419                         fi
1421                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1422                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1423                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1424                         ;;
1425                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1426                         # ia64: 64bit build using gcc with CFLAGS="-mpl64"
1427                         #       64bit build using HP's cc with CFLAGS="+DD64"
1428                         # hppa: 64bit build unsupported by gcc
1429                         #       64bit build using HP's cc with CFLAGS="+DA2.0w"
1430                         # HP-UX 11.00 ld needs PHSS_33034
1431                         BLDSHARED="true"
1432                         if test "${GCC}" = "yes"; then
1433                                 PICFLAG="-fPIC"
1434                                 LDSHFLAGS="-shared"
1435                         else
1436                                 PICFLAG="+z"
1437                                 LDSHFLAGS="-b"
1438                                 # "Uses depth-first symbol resolution"
1439                                 LDSHFLAGS="$LDSHFLAGS -Wl,-B,symbolic,-b"
1440                                 if test "$host_cpu" != "ia64"; then
1441                                         # "don't store literals in read-only memory" (?):
1442                                         PICFLAG="$PICFLAG +ESnolit"
1443                                 fi
1444                         fi
1445                         if test "$host_cpu" = "ia64"; then
1446                                 SHLIBEXT="so"
1447                                 # TODO: does the linker find the right 32/64 bit version of the libs? :
1448                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32:/usr/local/lib/hpux64:/usr/lib/hpux64"
1449                         else
1450                                 SHLIBEXT="sl"
1451                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1452                         fi
1453                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1454                                 SONAMEFLAG="-Wl,-soname="
1455                         else
1456                                 SONAMEFLAG="-Wl,+h,"
1457                         fi
1458                         # PIE/PIC flags at link time are required on HP-UX because
1459                         # linking requires a temporary source file, which is being
1460                         # compiled with the indicated flags - which need to contain
1461                         # PIC flags when we don't support PIE flags:
1462                         if test "$PIE_LDFLAGS" = "" ; then
1463                                 PIE_LDFLAGS=\${PICFLAG}
1464                         fi
1465                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1466                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1467                         ;;
1468                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1469                         BLDSHARED="true"
1470                         LDSHFLAGS="-shared"
1471                         SONAMEFLAG="-Wl,-soname,"
1472                         if test "${GCC}" = "yes"; then
1473                                 PICFLAG="-fPIC"
1474                         fi
1475                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1476                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1477                         for flags in "-expect_unresolved '*'" "-Wl,-expect_unresolved,'*'" ; do
1478                                 saved_ldflags="$LDFLAGS"
1479                                 AC_MSG_CHECKING([if $flags works])
1480                                 LDFLAGS="$flags $saved_ldflags"
1481                                 AC_TRY_LINK([],[],
1482                                         [AC_MSG_RESULT([yes])
1483                                         LDSHFLAGS_Z_NODEFS=$flags],
1484                                         AC_MSG_RESULT([no]))
1485                                 LDFLAGS="$saved_ldflags"
1486                                 test x"$LDSHFLAGS_Z_NODEFS" != x && break
1487                         done
1488                         ;;
1489                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1490                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1491                         ;;
1492                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1493                         BLDSHARED="true"
1494                         LDSHFLAGS="-shared"
1495                         SONAMEFLAG="-Wl,-soname,"
1496                         PICFLAG="-KPIC"
1497                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1498                         ;;
1499                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1500                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1501                         ;;
1502                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1503                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1504                         ;;
1505                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1506                         case "$host" in
1507                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1508                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1509                                         fi
1510                                         LDSHFLAGS="-G"
1511                                         DYNEXP="-Bexport"
1512                                 ;;
1513                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1514                         esac
1515                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1516                         ;;
1518                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1519                         if [ test "$GCC" != yes ]; then
1520                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1521                         fi
1522                         LDSHFLAGS="-G"
1523                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1524                         ;;
1525                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1526                         BLDSHARED="false"
1527                         LDSHFLAGS=""
1528                         ;;
1530                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1531                         BLDSHARED="true"
1532                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1533                         CFLAGS="$CFLAGS -fno-common"
1534                         SHLD="\${CC}"
1535                         SHLIBEXT="dylib"
1536                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1537                         SHLIBEXT="dylib"
1538                         # Since gcc doesn't fail on unrecognised options, the
1539                         # PIE test incorrectly succeeds. Darwin gcc does not
1540                         # actually support the PIE stuff.
1541                         PIE_LDFLAGS=
1542                         PIE_CFLAGS=
1543                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1544                         ;;
1546                 *)
1547                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1548                         ;;
1549   esac
1551 if test "$enable_shared" != "yes"; then
1552         BLDSHARED=false
1555 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1556         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1559 if test x"$BLDSHARED" = x"true" ; then
1560         LDFLAGS="$LDFLAGS -L./bin"
1563 AC_MSG_RESULT($BLDSHARED)
1565 if test x"$enable_developer" = x"yes" ; then
1566         default_as_needed=auto
1567 else
1568         default_as_needed=no
1570 AC_ARG_ENABLE(as-needed,
1571         AS_HELP_STRING([--enable-as-needed],
1572         [Turn on as-needed support if available (default=no)]),
1573         [enable_as_needed=$enableval],
1574         [enable_as_needed=$default_as_needed])
1575 if test "x$enable_as_needed" != xno; then
1576     saved_before_as_needed_ldflags="$LDFLAGS"
1577     for flags in "-Wl,--as-needed" "-Wl,-z,ignore" "-z ignore" ; do
1578         saved_ldflags="$LDFLAGS"
1579         AC_MSG_CHECKING([if $flags works])
1580         LDFLAGS="$flags $saved_ldflags"
1581         AC_TRY_LINK([],[],
1582                 [AC_MSG_RESULT([yes])
1583                 LD_AS_NEEDED_FLAG=$flags
1584                 ld_as_needed_flag_found=yes],
1585                 AC_MSG_RESULT([no]))
1586         LDFLAGS="$LD_AS_NEEDED_FLAG $saved_ldflags"
1587         test x"$ld_as_needed_flag_found" = xyes && break
1588     done
1591 if test x$ld_as_needed_flag_found = xyes -a x$enable_as_needed = xauto ; then
1592 # check if ld has bug described in https://bugzilla.samba.org/show_bug.cgi?id=7209#c17
1593         AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG has explicit external libs bug])
1594 cat > conftest_shb.c <<END
1595 void b() {}
1597 cat > conftest_sha.c <<END
1598 extern void b();
1599 void a() {
1600         b();
1603 cat > conftest.c <<END
1604 extern void a();
1605 int main() {
1606         a();
1607         return 0;
1611         rm -fr conftest
1612         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_sha.o conftest_sha.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1613         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_shb.o conftest_shb.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1614         TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1615         AC_TRY_COMMAND([$TESTCMD -o libconftest_shb.$SHLIBEXT conftest_shb.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1616         AC_TRY_COMMAND([$TESTCMD -o libconftest_sha.$SHLIBEXT conftest_sha.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1617         AC_TRY_COMMAND([$CC -o conftest conftest.c $LDFLAGS -L. -lconftest_sha -lconftest_shb 1>&AS_MESSAGE_LOG_FD 2>&1])
1618         if AC_TRY_COMMAND([eval "$LIB_PATH_VAR=. ./conftest 1>&AS_MESSAGE_LOG_FD 2>&1"])
1619         then
1620                 AC_MSG_RESULT([no])
1621         else
1622                 ld_as_needed_flag_found=no
1623                 LDFLAGS="$saved_before_as_needed_ldflags"
1624                 AC_MSG_RESULT([yes])
1625         fi
1626         rm conftest* libconftest*
1629 # check if we have to disable LD_AS_NEEDED_FLAG:
1630 # On some systems for a veriety of reasons linking with
1631 # -Wl,--as-needed -lreadline -lncurses fails
1632 # we have to retest, if these combination is detected before.
1633 # Bugzilla #7209
1635 if test x$ac_cv_lib_readline_rl_callback_handler_install = xyes ; then
1636         if test x$ld_as_needed_flag_found = xyes ; then
1637                 AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG works with readline])
1638                 # try if check no fails
1639                 save_LIBS=$LIBS
1640                 LIBS="$LIBS $TERMLIBS"
1641                 AC_TRY_LINK([], [rl_callback_handler_install();], [AC_MSG_RESULT([yes])],[ AC_MSG_RESULT([no]); LDFLAGS="$saved_before_as_needed_ldflags"])
1642                 LIBS="$save_LIBS"
1643         fi
1648 # for historical reasons almost all linkers don't complain about unresolved
1649 # symbols in shared libs. Except for the internal samba modules we want to get
1650 # errors when we produce a shared lib with unresolved symbols. On some
1651 # platforms unresolved symbols might be intended, so we might have to add
1652 # platform specific exceptions here.
1654 for flags in "-Wl,-z,defs" "-error_unresolved" "-Wl,-error_unresolved" ; do
1655         saved_ldflags="$LDFLAGS"
1656         AC_MSG_CHECKING([if $flags works])
1657         LDFLAGS="$flags $saved_ldflags"
1658         AC_TRY_LINK([],[],
1659         [AC_MSG_RESULT([yes])
1660         LDSHFLAGS_Z_DEFS=$flags
1661         ldshflags_z_defs_found=yes],
1662         AC_MSG_RESULT([no]))
1663         LDFLAGS=$saved_ldflags
1664         test x"$ldshflags_z_defs_found" = xyes && break
1665 done
1667 AC_MSG_CHECKING([LDSHFLAGS_Z_DEFS])
1668 AC_MSG_RESULT([$LDSHFLAGS_Z_DEFS])
1669 AC_MSG_CHECKING([LDFLAGS])
1670 AC_MSG_RESULT([$LDFLAGS])
1671 AC_MSG_CHECKING([DYNEXP])
1672 AC_MSG_RESULT([$DYNEXP])
1674 #######################################################
1675 # test whether building a shared library actually works
1676 if test $BLDSHARED = true; then
1678 AC_MSG_CHECKING([SHLD])
1679 AC_MSG_RESULT([$SHLD])
1680 AC_MSG_CHECKING([LDSHFLAGS])
1681 AC_MSG_RESULT([$LDSHFLAGS])
1683 AC_MSG_CHECKING([SHLIBEXT])
1684 AC_MSG_RESULT([$SHLIBEXT])
1685 AC_MSG_CHECKING([SONAMEFLAG])
1686 AC_MSG_RESULT([$SONAMEFLAG])
1688 AC_MSG_CHECKING([PICFLAG])
1689 AC_MSG_RESULT([$PICFLAG])
1691 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1692 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1694 AC_CACHE_CHECK([whether building shared libraries actually works],
1695                [ac_cv_shlib_works],[
1696    # try building a trivial shared library
1697    ac_cv_shlib_works=no
1698    # The $SHLD and $LDSHFLAGS variables may contain references to other
1699    # variables so they need to be eval'ed.
1700    if AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.o ${srcdir-.}/../tests/shlib.c 1>&AS_MESSAGE_LOG_FD])
1701    then
1702      TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1703      TESTCMD="$TESTCMD -o \"shlib.$SHLIBEXT\" shlib.o"
1704      if AC_TRY_COMMAND([eval $TESTCMD 1>&AS_MESSAGE_LOG_FD 2>&1])
1705      then
1706        ac_cv_shlib_works=yes
1707      fi
1708    fi
1709    rm -f "shlib.$SHLIBEXT" shlib.o
1712 if test $ac_cv_shlib_works = no; then
1713    BLDSHARED=false
1717 if test x"$BLDSHARED" != x"true"; then
1718         LDSHFLAGS="shared-libraries-disabled"
1719         SONAMEFLAG="shared-libraries-disabled"
1720         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1721         SHLD="shared-libraries-disabled"
1722         PICFLAG="${PIE_CFLAGS}"
1723         SHLIBEXT="shared_libraries_disabled"
1724         smbtorture4_possible=no
1727 AC_MSG_CHECKING([used PICFLAG])
1728 AC_MSG_RESULT([$PICFLAG])
1730 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1734 ###########################################################
1736 # Configuration of subsystems / libraries
1738 ###########################################################
1740 INSTALLLIBCMD_SH=:
1741 INSTALLLIBCMD_A=:
1742 UNINSTALLLIBCMD_SH=:
1743 UNINSTALLLIBCMD_A=:
1745 if test $BLDSHARED = true; then
1746         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
1747         UNINSTALLLIBCMD_SH="rm -f"
1749 if test $enable_static = yes; then
1750         INSTALLLIBCMD_A="\$(INSTALLCMD)"
1751         UNINSTALLLIBCMD_A="rm -f"
1754 #################################################
1755 # --disable-shared-libs
1756 # can be used to disable the internal use of shared libs altogether
1757 # (this only has an effect when building shared libs is enabled)
1759 USESHARED=false
1760 AC_SUBST(USESHARED)
1762 AC_MSG_CHECKING(whether to use shared libraries internally)
1763 AC_ARG_ENABLE([shared-libs],
1764         AS_HELP_STRING([--enable-shared-libs],
1765                 [Use shared libraries internally (default=yes)]),
1766         [enable_shared_libs=$enableval],
1767         [enable_shared_libs=yes])
1769 if test x"$enable_shared_libs" != x"no" ; then
1770         USESHARED=$BLDSHARED
1773 AC_MSG_RESULT([$USESHARED])
1775 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
1776         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
1779 #################################################
1780 # --with-static-libs=LIBS:
1781 #   link (internal) libs dynamically or statically?
1783 # If a subsystem is built as a library then this controls whether they are
1784 # linked into Samba targets statically or dynamically:
1786 # * If we build the shared library at all, we link dynamically by default.
1788 # * We only link statically if we don't build shared or if the library
1789 #   appears in the --with-static-libs configure option.
1791 # Example:
1792 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
1793 #   of linking the dynamic variant with -ltalloc.
1795 # NOTE: This option only affects libraries that we do not only build
1796 # but that samba also links against as libraries (as opposed to linking
1797 # the plain object files. - This has to be configured in Makefile.in.
1798 # So in particular it does not harm to give invalid or unknown names here.
1801 AC_ARG_WITH([static-libs],
1802         [AS_HELP_STRING([--with-static-libs=LIBS],
1803                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
1804         [AS_IF([test $withval],
1805                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
1806                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
1807                         eval LINK_$lib=STATIC
1808                 done], [])],
1809         [])
1812 # WORKAROUND:
1813 #   until we have organized other internal subsystems (as util, registry
1814 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
1815 #   dynamically to samba programs.
1817 LINK_LIBNETAPI=STATIC
1819 LINK_LIBSMBCLIENT=STATIC
1822 #  The library versions are hardcoded here
1823 #  and filled into the LIBFOO_SOVER variable.
1825 #  TODO: for talloc and tdb (at least), these should
1826 #  be extracted from their respective source directories
1828 AC_ARG_ENABLE(external_libtalloc,
1829         [AS_HELP_STRING([--enable-external-libtalloc],
1830                 [Enable external talloc [default=auto]])],
1831         [ enable_external_libtalloc=$enableval ],
1832         [ enable_external_libtalloc=auto ])
1834 if test "x$enable_external_libtalloc" != xno
1835 then
1836         PKG_CHECK_MODULES(LIBTALLOC, talloc >= 2.0.1,
1837                 [ enable_external_libtalloc=yes ],
1838                 [ if test x$enable_external_libtalloc = xyes; then
1839                         AC_MSG_ERROR([Unable to find libtalloc])
1840                   else
1841                         enable_external_libtalloc=no
1842                   fi
1843                 ])
1846 if test "x$enable_external_libtalloc" = xno
1847 then
1848         m4_include(../lib/talloc/libtalloc.m4)
1849         LINK_LIBTALLOC=STATIC
1850         LIBTALLOCVERSION=`grep ^VERSION ${tallocdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
1851         SMB_LIBRARY(talloc, 2, ${LIBTALLOCVERSION})
1852         LIBTALLOC_OBJ0=""
1853         for obj in ${TALLOC_OBJ}; do
1854                 LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
1855         done
1856         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
1857         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TALLOC_CFLAGS}"
1858         AC_SUBST(LIBTALLOC_OBJ0)
1860         TALLOCTORT="bin/talloctort"
1861         AC_SUBST(TALLOCTORT)
1865 AC_ARG_ENABLE(external_libtdb,
1866         [AS_HELP_STRING([--enable-external-libtdb],
1867                 [Enable external tdb [default=auto]])],
1868                 [ enable_external_libtdb=$enableval ],
1869                 [ enable_external_libtdb=auto ])
1871 if test "x$enable_external_libtdb" != xno
1872 then
1873         PKG_CHECK_MODULES(LIBTDB, tdb >= 1.2.6,
1874                 [ enable_external_libtdb=yes ],
1875                 [
1876                 if test x$enable_external_libtdb = xyes; then
1877                         AC_MSG_ERROR([Unable to find libtdb])
1878                 else
1879                         enable_external_libtdb=no
1880                 fi
1881                 ])
1884 AC_SUBST(LIBTDB_OBJ0)
1885 if test "x$enable_external_libtdb" = xno
1886 then
1887         m4_include(../lib/tdb/libtdb.m4)
1888         LINK_LIBTDB=STATIC
1889         LIBTDBVERSION=`grep ^VERSION ${tdbdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
1890         SMB_LIBRARY(tdb, 1, ${LIBTDBVERSION})
1891         LIBTDB_OBJ0=""
1892         LIBTDB_LIBS="$LIBTDB_LIBS $TDB_DEPS"
1893         for obj in ${TDB_OBJ}; do
1894                 LIBTDB_OBJ0="${LIBTDB_OBJ0} ${tdbdir}/${obj}"
1895         done
1896         AC_SUBST(LIBTDB_OBJ0)
1897         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
1898         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TDB_CFLAGS}"
1900         TDBBACKUP="bin/tdbbackup"
1901         AC_SUBST(TDBBACKUP)
1902         TDBDUMP="bin/tdbdump"
1903         AC_SUBST(TDBDUMP)
1904         TDBRESTORE="bin/tdbrestore"
1905         AC_SUBST(TDBRESTORE)
1906         TDBTOOL="bin/tdbtool"
1907         AC_SUBST(TDBTOOL)
1908         TDBTORTURE="bin/tdbtorture"
1909         AC_SUBST(TDBTORTURE)
1912 AC_ARG_ENABLE(external_libntdb,
1913         [AS_HELP_STRING([--enable-external-libntdb],
1914                 [Enable external ntdb [default=auto]])],
1915                 [ enable_external_libntdb=$enableval ],
1916                 [ enable_external_libntdb=auto ])
1918 if test "x$enable_external_libntdb" != xno
1919 then
1920         PKG_CHECK_MODULES(LIBNTDB, ntdb >= 1.0,
1921                 [ enable_external_libntdb=yes ],
1922                 [
1923                 if test x$enable_external_libntdb = xyes; then
1924                         AC_MSG_ERROR([Unable to find libntdb])
1925                 else
1926                         enable_external_libntdb=no
1927                 fi
1928                 ])
1931 AC_SUBST(LIBNTDB_OBJ0)
1932 if test "x$enable_external_libntdb" = xno
1933 then
1934         m4_include(../lib/ntdb/libntdb.m4)
1935         LINK_LIBNTDB=STATIC
1936         LIBNTDBVERSION=`grep ^VERSION ${ntdbdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
1937         SMB_LIBRARY(ntdb, 1, ${LIBNTDBVERSION})
1938         LIBNTDB_OBJ0=""
1939         LIBNTDB_LIBS="$LIBNTDB_LIBS $NTDB_DEPS"
1940         for obj in ${NTDB_OBJ}; do
1941                 LIBNTDB_OBJ0="${LIBNTDB_OBJ0} ${ntdbdir}/${obj}"
1942         done
1943         AC_SUBST(LIBNTDB_OBJ0)
1944         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${NTDB_CFLAGS}"
1945         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${NTDB_CFLAGS}"
1947         NTDBBACKUP="bin/ntdbbackup"
1948         AC_SUBST(NTDBBACKUP)
1949         NTDBDUMP="bin/ntdbdump"
1950         AC_SUBST(NTDBDUMP)
1951         NTDBRESTORE="bin/ntdbrestore"
1952         AC_SUBST(NTDBRESTORE)
1953         NTDBTOOL="bin/ntdbtool"
1954         AC_SUBST(NTDBTOOL)
1955         NTDBTORTURE="bin/ntdbtorture"
1956         AC_SUBST(NTDBTORTURE)
1959 SMB_LIBRARY(netapi, 0)
1960 SMB_LIBRARY(smbclient, 0)
1961 SMB_LIBRARY(smbsharemodes, 0)
1964 ################
1966 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1967 AC_TRY_RUN([#include <stdio.h>
1968 main() { long long x = 1000000; x *= x; return(((x/1000000) == 1000000)? 0: 1); }],
1969 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1970 if test x"$samba_cv_have_longlong" = x"yes"; then
1971     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1972     AC_CHECK_TYPE(intptr_t, unsigned long long)
1973 else
1974     AC_CHECK_TYPE(intptr_t, unsigned long)
1978 # Check if the compiler supports the LL prefix on long long integers.
1979 # AIX needs this.
1981 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1982     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1983         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1984 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1985    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1989 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
1990 AC_TRY_RUN([#include <time.h>
1991 main() { return((sizeof(time_t) == 8) ? 0 : 1); }],
1992 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
1993 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
1994     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
1997 AC_CACHE_CHECK([for TIME_T_MAX],samba_cv_TIME_T_MAX,[
1998 AC_TRY_RUN([#include <time.h>
1999 main() {
2000         struct tm *tm;
2001         if (sizeof(time_t) == 8) {
2002                 time_t max_time = 0x7fffffffffffffffll;
2003                 tm = gmtime(&max_time);
2004                 /* This should fail with 32-bit tm_year. */
2005                 if (tm == NULL) {
2006                         /* Max time_t that works with 32-bit int tm_year in struct tm. */
2007                         max_time = 67768036191676799ll;
2008                         tm = gmtime(&max_time);
2009                         if (tm) {
2010                                 return(0);
2011                         }
2012                 }
2013         }
2014         return(1);
2016 samba_cv_TIME_T_MAX=yes,samba_cv_TIME_T_MAX=no,samba_cv_TIME_T_MAX=cross)])
2017 if test x"$samba_cv_TIME_T_MAX" = x"yes"; then
2018     AC_DEFINE(TIME_T_MAX,67768036191676799ll,[The maximum value of the 'time_t' type])
2023 # As a gating factor for large file support, in order to
2024 # use >4GB files we must have the following minimal support
2025 # available: a 64 bit off_t
2026 # If we don't have all of these then fail the build
2029 AC_MSG_CHECKING([if large file support can be enabled])
2030 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2031 AC_TRY_RUN([#include <stdio.h>
2032 #include <sys/stat.h>
2033 main() { return((sizeof(off_t) == 8) ? 0 : 1); }],
2034 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2035 if test x"$samba_cv_SIZEOF_OFF_T" = x"no"; then
2036     AC_MSG_ERROR(["large file support support not available: sizeof(off_t) != 8"])
2039 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2040 AC_TRY_RUN([
2041 #if defined(HAVE_UNISTD_H)
2042 #include <unistd.h>
2043 #endif
2044 #include <stdio.h>
2045 #include <sys/stat.h>
2046 main() { return((sizeof(ino_t) == 8) ? 0 : 1); }],
2047 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2048 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2049     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2052 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2053 AC_TRY_RUN([
2054 #if defined(HAVE_UNISTD_H)
2055 #include <unistd.h>
2056 #endif
2057 #include <stdio.h>
2058 #include <sys/stat.h>
2059 main() { return((sizeof(dev_t) == 8) ? 0 : 1); }],
2060 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2061 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2062     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2065 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2066 AC_TRY_RUN([
2067 #if defined(HAVE_UNISTD_H)
2068 #include <unistd.h>
2069 #endif
2070 #include <sys/types.h>
2071 main() { dev_t dev; int i = major(dev); return 0; }],
2072 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2073 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2074     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2077 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2078 AC_TRY_RUN([
2079 #if defined(HAVE_UNISTD_H)
2080 #include <unistd.h>
2081 #endif
2082 #include <sys/types.h>
2083 main() { dev_t dev; int i = minor(dev); return 0; }],
2084 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2085 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2086     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2089 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2090 AC_TRY_RUN([
2091 #if defined(HAVE_UNISTD_H)
2092 #include <unistd.h>
2093 #endif
2094 #include <sys/types.h>
2095 main() { dev_t dev = makedev(1,2); return 0; }],
2096 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2097 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2098     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2101 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2102 AC_TRY_COMPILE([#include <sys/types.h>
2103 #include <dirent.h>
2104 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2105 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2106 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2107     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2110 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2111 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2112 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2113 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2114     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2117 if test x"$libreplace_cv_HAVE_CLOCK_GETTIME_IN_LIBRT" = xyes ; then
2118         LIBS="$LIBS -lrt"
2121 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2122 AC_TRY_RUN([#include <sys/types.h>
2123 #include <dirent.h>
2124 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2125 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2126 di->d_name[0] == 0) return(0); return(1);} ],
2127 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2128 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2129     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2132 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2133 AC_TRY_COMPILE([#include <sys/types.h>
2134 #include <utime.h>],
2135 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; return(utime("foo.c",&tbuf));],
2136 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2137 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2138     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2141 ##############
2142 # Check utmp details, but only if our OS offers utmp.h
2143 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2144 dnl  utmp and utmpx come in many flavours
2145 dnl  We need to check for many of them
2146 dnl  But we don't need to do each and every one, because our code uses
2147 dnl  mostly just the utmp (not utmpx) fields.
2149 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx getutxent)
2151 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2152 AC_TRY_COMPILE([#include <sys/types.h>
2153 #include <utmp.h>],
2154 [struct utmp ut;  ut.ut_name[0] = 'a';],
2155 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2156 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2157     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2160 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2161 AC_TRY_COMPILE([#include <sys/types.h>
2162 #include <utmp.h>],
2163 [struct utmp ut;  ut.ut_user[0] = 'a';],
2164 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2165 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2166     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2169 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2170 AC_TRY_COMPILE([#include <sys/types.h>
2171 #include <utmp.h>],
2172 [struct utmp ut;  ut.ut_id[0] = 'a';],
2173 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2174 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2175     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2178 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2179 AC_TRY_COMPILE([#include <sys/types.h>
2180 #include <utmp.h>],
2181 [struct utmp ut;  ut.ut_host[0] = 'a';],
2182 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2183 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2184     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2187 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2188 AC_TRY_COMPILE([#include <sys/types.h>
2189 #include <utmp.h>],
2190 [struct utmp ut;  time_t t; ut.ut_time = t;],
2191 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2192 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2193     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2196 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2197 AC_TRY_COMPILE([#include <sys/types.h>
2198 #include <utmp.h>],
2199 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2200 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2201 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2202     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2205 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2206 AC_TRY_COMPILE([#include <sys/types.h>
2207 #include <utmp.h>],
2208 [struct utmp ut;  ut.ut_type = 0;],
2209 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2210 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2211     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2214 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2215 AC_TRY_COMPILE([#include <sys/types.h>
2216 #include <utmp.h>],
2217 [struct utmp ut;  ut.ut_pid = 0;],
2218 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2219 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2220     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2223 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2224 AC_TRY_COMPILE([#include <sys/types.h>
2225 #include <utmp.h>],
2226 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2227 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2228 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2229     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2232 if test x$ac_cv_func_pututline = xyes ; then
2233   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2234   AC_TRY_COMPILE([#include <sys/types.h>
2235 #include <utmp.h>],
2236   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2237   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2238   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2239       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2240   fi
2243 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2244 AC_TRY_COMPILE([#include <sys/types.h>
2245 #include <utmpx.h>],
2246 [struct utmpx ux;  ux.ut_syslen = 0;],
2247 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2248 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2249     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2252 AC_CACHE_CHECK([whether sizeof ut_line in utmp is ok],samba_cv_HAVE_UX_UT_LINE,[
2253 AC_TRY_RUN([#include <stdio.h>
2254 #include <sys/types.h>
2255 #include <utmp.h>
2256 int main(void) {
2257  if (sizeof(((struct utmp *)NULL)->ut_line) < 15) {
2258      return 1;
2260  return 0;
2263 samba_cv_HAVE_UX_UT_LINE=yes,samba_cv_HAVE_UX_UT_LINE=no,samba_cv_HAVE_UX_UT_LINE=cross)])
2266 # end utmp details
2268 AC_CACHE_CHECK([for linux fallocate],samba_cv_HAVE_LINUX_FALLOCATE,[
2269 AC_TRY_COMPILE([
2270 #if defined(HAVE_UNISTD_H)
2271 #include <unistd.h>
2272 #endif
2273 #include <sys/types.h>
2274 #define _GNU_SOURCE
2275 #include <fcntl.h>
2276 #if defined(HAVE_LINUX_FALLOC_H)
2277 #include <linux/falloc.h>
2278 #endif],
2279 [int ret = fallocate(0, FALLOC_FL_KEEP_SIZE, 0, 10);],
2280 samba_cv_HAVE_LINUX_FALLOCATE=yes,samba_cv_HAVE_LINUX_FALLOCATE=no)])
2281 if test x"$samba_cv_HAVE_LINUX_FALLOCATE" = x"yes" && test x"$ac_cv_func_fallocate" = x"yes"; then
2282     AC_DEFINE(HAVE_LINUX_FALLOCATE,1,[Whether the Linux 'fallocate' function is available])
2285 AC_CACHE_CHECK([for getcwd takes NULL],samba_cv_GETCWD_TAKES_NULL,[
2286 AC_TRY_RUN([
2287 #if defined(HAVE_UNISTD_H)
2288 #include <unistd.h>
2289 #endif
2290 main() { char *s = getcwd(NULL,0); if (s) return(0); return(1); }],
2291 samba_cv_GETCWD_TAKES_NULL=yes,samba_cv_GETCWD_TAKES_NULL=no,samba_cv_GETCWD_TAKES_NULL=cross)])
2292 if test x"$samba_cv_GETCWD_TAKES_NULL" = x"yes"; then
2293     AC_DEFINE(GETCWD_TAKES_NULL,1,[Whether the getcwd function takes NULL as an argument])
2296 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2297 AC_ARG_WITH(libiconv,
2298 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2300   if test "$withval" = "no" ; then
2301     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2302   else
2303      if test "$withval" != "yes" ; then
2304         ICONV_PATH_SPEC=yes
2305         ICONV_LOOK_DIRS="$withval"
2306      fi
2307   fi
2310 for i in $ICONV_LOOK_DIRS ; do
2312     save_LIBS="$LIBS"
2313     save_LDFLAGS="$LDFLAGS"
2314     save_CPPFLAGS="$CPPFLAGS"
2316     iconv_current_LIBS=""
2317     iconv_current_LDFLAGS=""
2318     iconv_current_CPPFLAGS=""
2320     ICONV_FOUND="no"
2321     unset libext
2323     #  This is here to handle -withval stuff for --with-libiconv
2324     #  Perhaps we should always add a -L
2325     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2327     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2328     # installation paths. This gets a little tricky since we might have iconv
2329     # in both libiconv and in libc. In this case the jm_ICONV test will always
2330     # succeed when the header is found. To counter this, make sure the
2331     # library directory is there and check the ABI directory first (which
2332     # should be harmless on other systems, but causes tons of linker warnings on
2333     # 64bit Ubuntu systems).
2334     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2335     # installed, I've decided to fix the linker warnings.
2336     # -- Kai
2337     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2338     for l in "lib" "lib32" "lib/hpux32"; do
2339         if test -d "$i/$l" ; then
2340                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2341                 LIBS=
2342                 export LDFLAGS LIBS CPPFLAGS
2343                 # Try to find iconv(3)
2344                 jm_ICONV($i/$l)
2345                 if test x"$ICONV_FOUND" = "xyes" ; then
2346                     libext="$l"
2347                     break
2348                 fi
2349         fi
2350     done
2352     if test x"$ICONV_FOUND" = "xyes" ; then
2353         iconv_current_LDFLAGS="-L$i/$libext"
2354         iconv_current_CPPFLAGS="-I$i/include"
2356         if test x"$jm_cv_lib_iconv" != x; then
2357             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2358         else
2359             # We found iconv in libc.
2360             iconv_current_LIBS=""
2361         fi
2363     fi
2365     if test x"$ICONV_FOUND" = "xyes" ; then
2367         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2368         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2369         LIBS="$save_LIBS $iconv_current_LIBS"
2370         export LDFLAGS LIBS CPPFLAGS
2372         default_dos_charset=no
2373         default_unix_charset=no
2375         # check for default dos charset name
2376         for j in CP850 IBM850 ; do
2377             rjs_CHARSET($j)
2378             default_dos_charset="$ICONV_CHARSET"
2379             if test x"$default_dos_charset" = x"$j"; then
2380                 break
2381             fi
2382         done
2384         # check for default unix charset name
2385         for j in UTF-8 UTF8 ; do
2386             rjs_CHARSET($j)
2387             default_unix_charset="$ICONV_CHARSET"
2388             if test x"$default_unix_charset" = x"$j"; then
2389                 break
2390             fi
2391         done
2393         if test "$default_dos_charset" != "no" -a \
2394                 "$default_dos_charset" != "cross" -a \
2395                 "$default_unix_charset" != "no" -a \
2396                 "$default_unix_charset" != "cross"
2397         then
2398                 samba_cv_HAVE_NATIVE_ICONV=yes
2399         else
2400             if test "$default_dos_charset" = "cross" -o \
2401                      "$default_unix_charset" = "cross"
2402             then
2403                     samba_cv_HAVE_NATIVE_ICONV=cross
2404             else
2405                     samba_cv_HAVE_NATIVE_ICONV=no
2406             fi
2407         fi
2409         # At this point, we have a libiconv candidate. We know that
2410         # we have the right headers and libraries, but we don't know
2411         # whether it does the conversions we want. We can't test this
2412         # because we are cross-compiling. This is not necessarily a big
2413         # deal, since we can't guarantee that the results we get now will
2414         # match the results we get at runtime anyway.
2415         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2416             default_dos_charset="CP850"
2417             default_unix_charset="UTF-8"
2418             samba_cv_HAVE_NATIVE_ICONV=yes
2419             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2420             AC_MSG_WARN([$default_dos_charset and $default_unix_charset to UCS-16LE])
2421         fi
2423         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2425             CPPFLAGS=$save_CPPFLAGS
2426             LDFLAGS=$save_LDFLAGS
2427             LIBS=$save_LIBS
2429             if test x"$iconv_current_LIBS" != x; then
2430                 LIBS="$LIBS $iconv_current_LIBS"
2431             fi
2433             # Add the flags we need to CPPFLAGS and LDFLAGS
2434             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2435             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2437             # Turn the #defines into string literals
2438             default_dos_charset="\"$default_dos_charset\""
2439             default_unix_charset="\"$default_unix_charset\""
2441             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2442             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2443             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2445            break
2446         fi
2448     # We didn't find a working iconv, so keep going
2449     fi
2451     #  We only need to clean these up here for the next pass through the loop
2452     CPPFLAGS=$save_CPPFLAGS
2453     LDFLAGS=$save_LDFLAGS
2454     LIBS=$save_LIBS
2455     export LDFLAGS LIBS CPPFLAGS
2456 done
2457 unset libext
2460 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2461     AC_MSG_WARN([Sufficient support for iconv function was not found.
2462     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2463    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2464    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2468 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2469 AC_TRY_RUN([
2470 #include <sys/types.h>
2471 #include <fcntl.h>
2472 #ifndef F_GETLEASE
2473 #define F_GETLEASE      1025
2474 #endif
2475 main() {
2476        int fd = open("/dev/null", O_RDONLY);
2477        return fcntl(fd, F_GETLEASE, 0) == -1;
2480 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2481 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2482     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2485 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2486 AC_TRY_RUN([
2487 #include <sys/types.h>
2488 #include <fcntl.h>
2489 #include <signal.h>
2490 #ifndef F_NOTIFY
2491 #define F_NOTIFY 1026
2492 #endif
2493 main() {
2494         return(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2497 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2498 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2499     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2502 AC_CHECK_HEADER(sys/inotify.h)
2504 if test x"ac_cv_header_sys_inotify_h" = x"yes"; then
2505     AC_DEFINE(HAVE_INOTIFY,1,[For inotify support])
2508 #################################################
2509 # Check if FAM notifications are available. For FAM info, see
2510 #       http://oss.sgi.com/projects/fam/
2511 #       http://savannah.nongnu.org/projects/fam/
2512 AC_ARG_ENABLE(fam,
2513 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2515 if test x$enable_fam != xno; then
2516     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2517     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2518         # On IRIX, libfam requires libC, but other FAM implementations
2519         # might not need it.
2520         AC_CHECK_LIB(fam, FAMOpen2,
2521             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam";
2522             AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2523             [samba_cv_HAVE_LIBFAM=no])
2525         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2526             samba_fam_xtra=-lC
2527             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2528                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC";
2529                 AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2530                 [samba_cv_HAVE_LIBFAM=no])
2531             unset samba_fam_xtra
2532         fi
2533     fi
2534     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2535         default_shared_modules="$default_shared_modules vfs_notify_fam"
2536         AC_TRY_COMPILE([#include <fam.h>],
2537                     [enum FAMCodes code = FAMChanged;],
2538                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2539                         [Whether fam.h contains a typedef for enum FAMCodes]),
2540                     [])
2541     fi
2543     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2544         AC_CHECK_LIB(fam, FAMNoExists,
2545             [AC_DEFINE(HAVE_FAMNOEXISTS, 1, Define to 1 if there is support for FAMNoExists)])
2546     fi
2548     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2549         AC_MSG_ERROR(FAM support requested but FAM library not available )
2550     fi
2553 AC_SUBST(SMB_FAM_LIBS)
2555 #################################################
2556 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2559 with_dmapi_support=auto
2560 AC_MSG_CHECKING(whether to use DMAPI support)
2561 AC_ARG_WITH(dmapi,
2562 [AS_HELP_STRING([--with-dmapi], [Include DMAPI/XDSM support (default=auto)])],
2563 [ case "$withval" in
2564   yes|no)
2565     with_dmapi_support=$withval
2566     ;;
2567   esac ]
2569 AC_MSG_RESULT([$with_dmapi_support])
2571 if test x"$with_dmapi_support" != xno ; then
2572         SMB_CHECK_DMAPI([], [
2573                 AC_MSG_NOTICE(DMAPI support not present)
2574                 if test x"$with_dmapi_support" = xyes ; then
2575                         AC_MSG_ERROR(no DMAPI support found but requested!)
2576                 fi
2577                 ]
2578         )
2581 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2582 # Theoretically it should work with AIX JFS2 too but this needs testing
2583 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2584     default_shared_modules="$default_shared_modules vfs_tsmsm"
2587 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2588 AC_TRY_RUN([
2589 #include <sys/types.h>
2590 #include <fcntl.h>
2591 #include <signal.h>
2592 #include <sys/file.h>
2593 #ifndef LOCK_MAND
2594 #define LOCK_MAND       32
2595 #define LOCK_READ       64
2596 #endif
2597 main() {
2598         return(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2601 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2602 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2603     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2607 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2608 AC_TRY_COMPILE([#include <sys/types.h>
2609 #include <fcntl.h>],
2610 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2611 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2612 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2613     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2616 #################################################
2617 # Check for POSIX capability support
2619 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2620     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2621     [], [])
2623 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2625     ac_save_LIBS=$LIBS
2626     AC_LIBTESTFUNC(cap, cap_get_proc)
2628     AC_CACHE_CHECK([for POSIX capabilities],
2629             samba_cv_HAVE_POSIX_CAPABILITIES,
2630             [
2631                 AC_TRY_RUN([
2632 #include <sys/types.h>
2633 #include <sys/capability.h>
2634 main() {
2635  cap_t cap;
2636  cap_value_t vals[1];
2637  if (!(cap = cap_get_proc()))
2638    return(1);
2639  vals[0] = CAP_CHOWN;
2640  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2641  cap_set_proc(cap);
2642  return(0);
2644                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2645                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2646                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2647             ])
2649 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2650     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2651             [Whether POSIX capabilities are available])
2652 else
2653     LIBS=$ac_save_LIBS
2659 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2660 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2663 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2664 AC_TRY_COMPILE([#include <sys/types.h>
2665 #if defined(HAVE_RPC_RPC_H)
2666 #include <rpc/rpc.h>
2667 #endif],
2668 [int16 testvar;],
2669 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2670 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2671     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2674 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2675 AC_TRY_COMPILE([#include <sys/types.h>
2676 #if defined(HAVE_RPC_RPC_H)
2677 #include <rpc/rpc.h>
2678 #endif],
2679 [uint16 testvar;],
2680 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2681 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2682     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2685 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2686 AC_TRY_COMPILE([#include <sys/types.h>
2687 #if defined(HAVE_RPC_RPC_H)
2688 #include <rpc/rpc.h>
2689 #endif],
2690 [int32 testvar;],
2691 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2692 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2693     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2696 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2697 AC_TRY_COMPILE([#include <sys/types.h>
2698 #if defined(HAVE_RPC_RPC_H)
2699 #include <rpc/rpc.h>
2700 #endif],
2701 [uint32 testvar;],
2702 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2703 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2704     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2708 dnl Some systems (SCO) have a problem including
2709 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2710 dnl as a #define in <prot.h> and as part of an enum
2711 dnl in <rpc/rpc.h>.
2714 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2715 AC_TRY_COMPILE([#include <sys/types.h>
2716 #ifdef HAVE_SYS_SECURITY_H
2717 #include <sys/security.h>
2718 #include <prot.h>
2719 #endif  /* HAVE_SYS_SECURITY_H */
2720 #if defined(HAVE_RPC_RPC_H)
2721 #include <rpc/rpc.h>
2722 #endif],
2723 [int testvar;],
2724 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2725 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2726     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2729 AC_MSG_CHECKING([for test routines])
2730 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
2731            AC_MSG_RESULT(yes),
2732            AC_MSG_ERROR([cant find test code. Aborting config]),
2733            AC_MSG_WARN([cannot run when cross-compiling]))
2735 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2736 AC_TRY_RUN([#include "${srcdir-.}/../tests/ftruncate.c"],
2737            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2738 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2739     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2742 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2743 AC_TRY_RUN([#include "${srcdir-.}/../tests/getgroups.c"],
2744            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2745 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2746     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2749 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2750 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2751 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2752 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2753 AC_CHECK_FUNCS(getpagesize)
2755 ################################################
2756 # look for a method of setting the effective uid
2757 seteuid=no;
2759 ################################################
2760 # Start by checking for 32-bit system call definitions on Linux.
2762 case "$host_os" in
2763 *linux*)
2764 AC_CACHE_CHECK([for Linux 32-bit system calls],samba_cv_USE_LINUX_32BIT_SYSCALLS,[
2765 AC_TRY_COMPILE([
2766 #if defined(HAVE_UNISTD_H)
2767 #include <unistd.h>
2768 #endif
2769 #include <stdlib.h>
2770 #include <stdio.h>
2771 #include <sys/types.h>
2772 #include <errno.h>
2774 #ifdef HAVE_SYS_PRIV_H
2775 #include <sys/priv.h>
2776 #endif
2777 #ifdef HAVE_SYS_ID_H
2778 #include <sys/id.h>
2779 #endif
2781 #if defined(HAVE_SYSCALL_H)
2782 #include <syscall.h>
2783 #endif
2785 #if defined(HAVE_SYS_SYSCALL_H)
2786 #include <sys/syscall.h>
2787 #endif
2790 syscall(SYS_setresuid32, -1, -1, -1);
2791 syscall(SYS_setresgid32, -1, -1, -1);
2792 syscall(SYS_setreuid32, -1, -1);
2793 syscall(SYS_setregid32, -1, -1);
2794 syscall(SYS_setuid32, -1);
2795 syscall(SYS_setgid32, -1);
2796 syscall(SYS_setgroups32, 0, NULL);
2797 ], samba_cv_USE_LINUX_32BIT_SYSCALLS=yes,samba_cv_USE_LINUX_32BIT_SYSCALLS=no,samba_cv_USE_LINUX_32BIT_SYSCALLS=cross)])
2799 if test x"$samba_cv_USE_LINUX_32BIT_SYSCALLS" = x"yes"; then
2800     AC_DEFINE(USE_LINUX_32BIT_SYSCALLS,1,[Use Linux 32-bit system calls])
2801     AC_CACHE_CHECK([for Linux thread-specific credentials with 32-bit system calls],samba_cv_USE_LINUX_THREAD_CREDENTIALS,[
2802     AC_TRY_RUN([
2803 #define AUTOCONF_TEST 1
2804 #define USE_LINUX_THREAD_CREDENTIALS 1
2805 #define USE_LINUX_32BIT_SYSCALLS 1
2806 #include "${srcdir-.}/../lib/util/setid.c"
2807 #include "${srcdir-.}/lib/util_sec.c"],
2808            samba_cv_USE_LINUX_THREAD_CREDENTIALS=yes,samba_cv_USE_LINUX_THREAD_CREDENTIALS=no,samba_cv_USE_LINUX_THREAD_CREDENTIALS=cross)])
2809 if test x"$samba_cv_USE_LINUX_THREAD_CREDENTIALS" = x"yes"; then
2810     seteuid=yes;
2811     AC_DEFINE(USE_LINUX_THREAD_CREDENTIALS,1,[Whether we can use Linux thread-specific credentials with 32-bit system calls])
2815 if test $seteuid = no; then
2816 AC_CACHE_CHECK([for Linux thread-specific credentials],samba_cv_USE_LINUX_THREAD_CREDENTIALS,[
2817 AC_TRY_RUN([
2818 #define AUTOCONF_TEST 1
2819 #define USE_LINUX_THREAD_CREDENTIALS 1
2820 #include "${srcdir-.}/../lib/util/setid.c"
2821 #include "${srcdir-.}/lib/util_sec.c"],
2822            samba_cv_USE_LINUX_THREAD_CREDENTIALS=yes,samba_cv_USE_LINUX_THREAD_CREDENTIALS=no,samba_cv_USE_LINUX_THREAD_CREDENTIALS=cross)])
2823 if test x"$samba_cv_USE_LINUX_THREAD_CREDENTIALS" = x"yes"; then
2824     seteuid=yes;AC_DEFINE(USE_LINUX_THREAD_CREDENTIALS,1,[Whether we can use Linux thread-specific credentials])
2829 esac
2831 if test $seteuid = no; then
2832 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2833 AC_TRY_RUN([
2834 #define AUTOCONF_TEST 1
2835 #define USE_SETREUID 1
2836 #include "confdefs.h"
2837 #include "${srcdir-.}/../lib/util/setid.c"
2838 #include "${srcdir-.}/lib/util_sec.c"],
2839            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2840 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2841     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2845 # we check for setresuid second as it conflicts with AIO on Linux. 
2846 # see http://samba.org/~tridge/junkcode/aio_uid.c
2847 if test $seteuid = no; then
2848 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2849 AC_TRY_RUN([
2850 #define AUTOCONF_TEST 1
2851 #define USE_SETRESUID 1
2852 #include "confdefs.h"
2853 #include "${srcdir-.}/../lib/util/setid.c"
2854 #include "${srcdir-.}/lib/util_sec.c"],
2855            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2856 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2857     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2861 if test $seteuid = no; then
2862 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2863 AC_TRY_RUN([
2864 #define AUTOCONF_TEST 1
2865 #define USE_SETEUID 1
2866 #include "confdefs.h"
2867 #include "${srcdir-.}/../lib/util/setid.c"
2868 #include "${srcdir-.}/lib/util_sec.c"],
2869            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2870 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2871     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2875 if test $seteuid = no; then
2876 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2877 AC_TRY_RUN([
2878 #define AUTOCONF_TEST 1
2879 #define USE_SETUIDX 1
2880 #include "confdefs.h"
2881 #include "${srcdir-.}/../lib/util/setid.c"
2882 #include "${srcdir-.}/lib/util_sec.c"],
2883            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2884 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2885     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2889 AC_CACHE_CHECK([for the Darwin initgroups system call],
2890         samba_cv_DARWIN_INITGROUPS,
2891         AC_TRY_LINK([
2892 #include <sys/syscall.h>
2893 #include <unistd.h>
2894         ],
2895         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2896         samba_cv_DARWIN_INITGROUPS=yes,
2897         samba_cv_DARWIN_INITGROUPS=no)
2900 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2901     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2902         [Whether to use the Darwin-specific initgroups system call])
2905 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2906 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock.c"],
2907            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2908 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2909     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2912 # glibc up to 2.3.6 had dangerously broken posix_fallocate(). DON'T USE IT.
2913 AC_CACHE_CHECK([for broken posix_fallocate],samba_cv_HAVE_BROKEN_POSIX_FALLOCATE,[
2914 AC_TRY_COMPILE([
2915   #define _XOPEN_SOURCE 600
2916   #include <stdlib.h>
2917   #if defined(__GLIBC__) && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4))
2918   #error probably broken posix_fallocate
2919   #endif
2920 ], [
2921 ], 
2922 samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=no,samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=yes)])
2923 if test x"$samba_cv_HAVE_BROKEN_POSIX_FALLOCATE" = xyes; then
2924         AC_DEFINE(HAVE_BROKEN_POSIX_FALLOCATE, 1, Whether we have a broken posix_fallocate)
2928 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2929 AC_TRY_COMPILE([#include <sys/types.h>
2930 #include <sys/stat.h>
2931 #include <unistd.h>],
2932 [struct stat st;  st.st_blocks = 0;],
2933 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2934 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2935     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2938 AC_CACHE_CHECK([for 32 bit blkcnt_t],samba_cv_SIZEOF_BLKCNT_T_4,[
2939 AC_TRY_RUN([
2940 #if defined(HAVE_UNISTD_H)
2941 #include <unistd.h>
2942 #endif
2943 #include <stdio.h>
2944 #include <sys/types.h>
2945 #include <sys/stat.h>
2946 main() { return((sizeof(blkcnt_t) == 4) ? 0 : 1); }],
2947 samba_cv_SIZEOF_BLKCNT_T_4=yes,samba_cv_SIZEOF_BLKCNT_T_4=no,samba_cv_SIZEOF_BLKCNT_T_4=cross)])
2948 if test x"$samba_cv_SIZEOF_BLKCNT_T_4" = x"yes"; then
2949     AC_DEFINE(SIZEOF_BLKCNT_T_4,1,[The size of the 'blkcnt_t' type])
2952 AC_CACHE_CHECK([for 64 bit blkcnt_t],samba_cv_SIZEOF_BLKCNT_T_8,[
2953 AC_TRY_RUN([
2954 #if defined(HAVE_UNISTD_H)
2955 #include <unistd.h>
2956 #endif
2957 #include <stdio.h>
2958 #include <sys/types.h>
2959 #include <sys/stat.h>
2960 main() { return((sizeof(blkcnt_t) == 8) ? 0 : 1); }],
2961 samba_cv_SIZEOF_BLKCNT_T_8=yes,samba_cv_SIZEOF_BLKCNT_T_8=no,samba_cv_SIZEOF_BLKCNT_T_8=cross)])
2962 if test x"$samba_cv_SIZEOF_BLKCNT_T_8" = x"yes"; then
2963     AC_DEFINE(SIZEOF_BLKCNT_T_8,1,[The size of the 'blkcnt_t' type])
2966 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2967 AC_TRY_COMPILE([#include <sys/types.h>
2968 #include <sys/stat.h>
2969 #include <unistd.h>],
2970 [struct stat st;  st.st_blksize = 0;],
2971 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2972 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2973     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2976 AC_CACHE_CHECK([for st_flags in struct stat],
2977         samba_cv_HAVE_STAT_ST_FLAGS,
2978         [
2979             AC_TRY_COMPILE([#include <sys/types.h>
2980 #include <sys/stat.h>
2981 #include <unistd.h>],
2982             [struct stat st;  st.st_flags = 0;],
2983             samba_cv_HAVE_STAT_ST_FLAGS=yes,
2984             samba_cv_HAVE_STAT_ST_FLAGS=no,
2985             samba_cv_HAVE_STAT_ST_FLAGS=cross)
2986         ])
2988 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
2989     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
2990                 [Whether the stat struct has a st_flags member])
2993 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2994 AC_TRY_COMPILE([
2995 #include <sys/types.h>
2996 #include <sys/acl.h>
2997 #if defined(HAVE_RPCSVC_NIS_H)
2998 #include <rpcsvc/nis.h>
2999 #endif],
3000 [int i;],
3001 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3002 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3003         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3006 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3007 AC_TRY_RUN([
3008 #include <stdio.h>
3009 #include <limits.h>
3010 #include <signal.h>
3012 void exit_on_core(int ignored) {
3013         exit(1);
3016 main() {
3017         char *newpath;
3018         signal(SIGSEGV, exit_on_core);
3019         newpath = realpath("/tmp", NULL);
3020         return((newpath != NULL) ? 0 : 1);
3023 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3024 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3025     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3028 #################################################
3029 # check for AFS clear-text auth support
3030 samba_cv_WITH_AFS=no
3031 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3032 AC_ARG_WITH(afs,
3033 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
3034 [ case "$withval" in
3035   yes|auto)
3036     AC_MSG_RESULT($withval)
3037     samba_cv_WITH_AFS=$withval
3038     ;;
3039   *)
3040     AC_MSG_RESULT(no)
3041     ;;
3042   esac ],
3043   AC_MSG_RESULT(no)
3046 ####################################################
3047 # check for Linux-specific AFS fake-kaserver support
3048 samba_cv_WITH_FAKE_KASERVER=no
3049 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3050 AC_ARG_WITH(fake-kaserver,
3051 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
3052 [ case "$withval" in
3053   yes|auto)
3054     AC_MSG_RESULT($withval)
3055     samba_cv_WITH_FAKE_KASERVER=$withval
3056     ;;
3057   *)
3058     AC_MSG_RESULT(no)
3059     ;;
3060   esac ],
3061   AC_MSG_RESULT(no)
3064 #################################################
3065 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3066 if test x"$samba_cv_WITH_AFS" != x"no" ||
3067    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3069     # see if this box has the OpenSSL DES libraries
3070     AC_CHECK_LIB( crypto, DES_pcbc_encrypt, LIBS="$LIBS -lcrypto" , [AC_ERROR(OpenSSL library: libcrypto ot found!)] )
3072     # see if this box has the afs-headers in /usr/include/afs
3073     AC_MSG_CHECKING(for /usr/include/afs)
3074     if test -d /usr/include/afs; then
3075           AC_MSG_RESULT(yes)
3076     else
3077       AC_MSG_RESULT(no)
3078     fi
3080     # check for afs.h
3081     have_afs_headers=no
3082     AC_CHECK_HEADERS(afs.h afs/afs.h)
3083     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3084         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3085            test x"$samba_cv_WITH_AFS" = x"auto"; then
3086                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3087         else
3088                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3089         fi
3090     else
3091         have_afs_headers=yes
3092     fi
3095 FAKE_KASERVER_OBJ=""
3096 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3097     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3098     FAKE_KASERVER_OBJ="utils/net_afs.o"
3100 AC_SUBST(FAKE_KASERVER_OBJ)
3102 #################################################
3103 # check whether to compile AFS/NT ACL mapping module
3104 samba_cv_WITH_VFS_AFSACL=no
3105 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3106 AC_ARG_WITH(vfs-afsacl,
3107 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
3108 [ case "$withval" in
3109   yes|auto)
3110     AC_MSG_RESULT($withval)
3111     samba_cv_WITH_VFS_AFSACL=yes
3112     ;;
3113   *)
3114     AC_MSG_RESULT(no)
3115     ;;
3116   esac ],
3117   AC_MSG_RESULT(no)
3120 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3121    default_shared_modules="$default_shared_modules vfs_afsacl"
3123         
3124 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3125     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3128 #################################################
3129 # check for the DFS clear-text auth system
3130 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3131 AC_ARG_WITH(dfs,
3132 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3133 [ case "$withval" in
3134   yes)
3135     AC_MSG_RESULT(yes)
3136     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3137     ;;
3138   *)
3139     AC_MSG_RESULT(no)
3140     ;;
3141   esac ],
3142   AC_MSG_RESULT(no)
3145 ########################################################
3146 # Compile with LDAP support?
3148 with_ldap_support=auto
3149 AC_MSG_CHECKING([for LDAP support])
3151 AC_ARG_WITH(ldap,
3152 [AS_HELP_STRING([--with-ldap], [LDAP support (default=auto)])],
3153 [ case "$withval" in
3154     yes|no)
3155         with_ldap_support=$withval
3156         ;;
3157   esac ])
3159 AC_MSG_RESULT($with_ldap_support)
3161 SMBLDAP=""
3162 AC_SUBST(SMBLDAP)
3164 if test x"$with_ldap_support" != x"no"; then
3166   ##################################################################
3167   # first test for ldap.h and lber.h
3168   # (ldap.h is required for this test)
3169   AC_CHECK_HEADERS(ldap.h lber.h)
3171   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3172         if test x"$with_ldap_support" = x"yes"; then
3173          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3174         else
3175          AC_MSG_WARN(ldap.h is needed for LDAP support)
3176         fi
3177         
3178         with_ldap_support=no
3179   fi
3181   ##################################################################
3182   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3183   # unsigned int in include/includes.h
3184   case $host_os in
3185         *hpux*)
3186          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3187          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3188         with_ldap_support=yes
3189         ;;
3190         *)
3191         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3192         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3193                 if test x"$with_ldap_support" = x"yes"; then
3194                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3195                 else
3196                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3197                 fi
3198                 with_ldap_support=no
3199         fi
3200         ;;
3201   esac
3204 if test x"$with_ldap_support" != x"no"; then
3205   ac_save_LIBS=$LIBS
3207   ##################################################################
3208   # we might need the lber lib on some systems. To avoid link errors
3209   # this test must be before the libldap test
3210   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3212   ########################################################
3213   # If ber_sockbuf_add_io() is available we can add
3214   # SASL wrapping hooks
3215   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3217   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3218                  AC_TRY_COMPILE([#include <ldap.h>],
3219                                 [int val = LDAP_OPT_SOCKBUF;],
3220                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3221                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3223   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3224           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3225         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3226   fi
3228   #######################################################
3229   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3230   # ldap logging and print it out in the samba logs
3231   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3232                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3233                  [AC_TRY_COMPILE([#include <lber.h>],
3234                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3235                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3236                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3238   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3239         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3240                   [Support for LDAP/LBER logging interception])
3241   fi
3243   ########################################################
3244   # now see if we can find the ldap libs in standard paths
3245   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3247   ########################################################
3248   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3249   # Check found in pam_ldap 145.
3250   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3252   LIBS="$LIBS $LDAP_LIBS"
3253   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3254     AC_TRY_COMPILE([
3255         #include <lber.h>
3256         #include <ldap.h>],
3257         [ldap_set_rebind_proc(0, 0, 0);],
3258         [smb_ldap_cv_ldap_set_rebind_proc=3],
3259         [smb_ldap_cv_ldap_set_rebind_proc=2]
3260     )
3261   ])
3263   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3265   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3267   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3268     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3269     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3270     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3271     default_shared_modules="$default_shared_modules";
3272     SMBLDAP="lib/smbldap.o"
3273     with_ldap_support=yes
3274     AC_MSG_CHECKING(whether LDAP support is used)
3275     AC_MSG_RESULT(yes)
3276   else
3277     if test x"$with_ldap_support" = x"yes"; then
3278         AC_MSG_ERROR(libldap is needed for LDAP support)
3279     else
3280         AC_MSG_WARN(libldap is needed for LDAP support)
3281     fi
3283     LDAP_LIBS=""
3284     with_ldap_support=no
3285   fi
3286   LIBS=$ac_save_LIBS
3290 #################################################
3291 # active directory support
3293 with_ads_support=auto
3294 AC_MSG_CHECKING([for Active Directory and krb5 support])
3296 AC_ARG_WITH(ads,
3297 [AS_HELP_STRING([--with-ads], [Active Directory support (default=auto)])],
3298 [ case "$withval" in
3299     yes|no)
3300         with_ads_support="$withval"
3301         ;;
3302   esac ])
3304 AC_MSG_RESULT($with_ads_support)
3306 FOUND_KRB5=no
3307 KRB5_LIBS=""
3309 if test x"$with_ldap_support" != x"yes"; then
3311     if test x"$with_ads_support" = x"yes"; then
3312         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3313     elif test x"$with_ads_support" = x"auto"; then
3314         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3315         with_ads_support=no
3316     fi
3318 else
3320     # Check to see whether there is enough LDAP functionality to be able
3321     # to build AD support.
3323 # HPUX and Solaris only has ldap_init; ok, we take care of this in smbldap.c
3324 case "$host_os" in
3325         *hpux* | *solaris*)
3326     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3328     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3329         if test x"$with_ads_support" = x"yes"; then
3330             AC_MSG_ERROR(Active Directory support on HPUX or Solaris requires ldap_init)
3331         elif test x"$with_ads_support" = x"auto"; then
3332             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX or Solaris))
3333             with_ads_support=no
3334         fi
3335     fi
3336     ;;
3337         *)
3338     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3340     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3341         if test x"$with_ads_support" = x"yes"; then
3342             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3343         elif test x"$with_ads_support" = x"auto"; then
3344             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3345             with_ads_support=no
3346         fi
3347     fi
3348     ;;
3349 esac
3352     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3354     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3355         if test x"$with_ads_support" = x"yes"; then
3356             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3357         elif test x"$with_ads_support" = x"auto"; then
3358             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3359             with_ads_support=no
3360         fi
3361     fi
3365 if test x"$with_ads_support" != x"no"; then
3367   # Do no harm to the values of CFLAGS and LIBS while testing for
3368   # Kerberos support.
3370   if test x$FOUND_KRB5 = x"no"; then
3371     #################################################
3372     # check for location of Kerberos 5 install
3373     AC_MSG_CHECKING(for kerberos 5 install path)
3374     AC_ARG_WITH(krb5,
3375     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3376     [ case "$withval" in
3377       no)
3378         AC_MSG_RESULT(no krb5-path given)
3379         ;;
3380       yes)
3381         AC_MSG_RESULT(/usr)
3382         ;;
3383       *)
3384         AC_MSG_RESULT($withval)
3385         KRB5_CFLAGS="-I$withval/include"
3386         KRB5_CPPFLAGS="-I$withval/include"
3387         KRB5_LDFLAGS="-L$withval/lib"
3388         FOUND_KRB5=yes
3389         if test -x "$withval/bin/krb5-config"; then
3390                 KRB5CONFIG=$withval/bin/krb5-config
3391         fi
3392         ;;
3393       esac ],
3394       AC_MSG_RESULT(no krb5-path given)
3395     )
3396   fi
3398   #################################################
3399   # check for krb5-config from recent MIT and Heimdal kerberos 5
3400   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3401   AC_MSG_CHECKING(for working krb5-config)
3402   if test -x "$KRB5CONFIG" && $KRB5CONFIG --libs gssapi > /dev/null ; then
3403     ac_save_CFLAGS=$CFLAGS
3404     CFLAGS="";export CFLAGS
3405     ac_save_LDFLAGS=$LDFLAGS
3406     LDFLAGS="";export LDFLAGS
3407     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3408     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3409     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3410     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3411     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3412     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3413     FOUND_KRB5=yes
3414     AC_MSG_RESULT(yes)
3415   else
3416     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3417   fi
3419   if test x$FOUND_KRB5 = x"no"; then
3420     #################################################
3421     # see if this box has the SuSE location for the heimdal krb implementation
3422     AC_MSG_CHECKING(for /usr/include/heimdal)
3423     if test -d /usr/include/heimdal; then
3424       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3425           KRB5_CFLAGS="-I/usr/include/heimdal"
3426           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3427           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3428           FOUND_KRB5=yes
3429           AC_MSG_RESULT(yes)
3430       else
3431           KRB5_CFLAGS="-I/usr/include/heimdal"
3432           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3433           FOUND_KRB5=yes
3434           AC_MSG_RESULT(yes)
3435       fi
3436     else
3437       AC_MSG_RESULT(no)
3438     fi
3439   fi
3441   if test x$FOUND_KRB5 = x"no"; then
3442     #################################################
3443     # see if this box has the RedHat location for kerberos
3444     AC_MSG_CHECKING(for /usr/kerberos)
3445     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3446       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3447       KRB5_CFLAGS="-I/usr/kerberos/include"
3448       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3449       FOUND_KRB5=yes
3450       AC_MSG_RESULT(yes)
3451     else
3452       AC_MSG_RESULT(no)
3453     fi
3454   fi
3456   if test x$FOUND_KRB5 = x"no"; then
3457     #################################################
3458     # see if this box has the OpenBSD location for heimdal krb5
3459     AC_MSG_CHECKING(for /usr/include/kerberosV)
3460     if test -d /usr/include/kerberosV; then
3461       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3462       KRB5_LIBS="-lcrypto"
3463       FOUND_KRB5=yes
3464       AC_MSG_RESULT(yes)
3465     else
3466       AC_MSG_RESULT(no)
3467     fi
3468   fi
3470   if test x$FOUND_KRB5 = x"no"; then
3471     #################################################
3472     # see if this box has Solaris MIT kerberos implementation
3473     AC_MSG_CHECKING(for Solaris MIT kerberos)
3474     if test -x "$KRB5CONFIG" && $KRB5CONFIG --version | grep -s Solaris | grep -s MIT > /dev/null ; then
3475        FOUND_KRB5=yes
3476        KRB5_LIBS="-lgss -lkrb5"
3477        KRB5_CFLAGS="`$KRB5CONFIG --cflags`"
3478        KRB5_CPPFLAGS="`$KRB5CONFIG --cflags`"
3479        AC_MSG_RESULT(yes)
3480     else
3481       AC_MSG_RESULT(no)
3482     fi
3483   fi
3485   ac_save_CFLAGS=$CFLAGS
3486   ac_save_CPPFLAGS=$CPPFLAGS
3487   ac_save_LDFLAGS=$LDFLAGS
3489   # remove needless evil rpath stuff as early as possible:
3490   LIB_REMOVE_USR_LIB(KRB5_LIBS)
3491   LIB_REMOVE_USR_LIB(KRB5_LDFLAGS)
3492   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3493   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3494   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3496   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3498   # now check for krb5.h. Some systems have the libraries without the headers!
3499   # note that this check is done here to allow for different kerberos
3500   # include paths
3501   AC_CHECK_HEADERS(krb5.h)
3503   if test x"$ac_cv_header_krb5_h" = x"no"; then
3505     # Give a warning if AD support was not explicitly requested,
3506     # i.e with_ads_support = auto, otherwise die with an error.
3508     if test x"$with_ads_support" = x"yes"; then
3509       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3510     else
3511       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3512     fi
3514     # Turn off AD support and restore CFLAGS and LIBS variables
3516     with_ads_support="no"
3518     CFLAGS=$ac_save_CFLAGS
3519     CPPFLAGS=$ac_save_CPPFLAGS
3520     LDFLAGS=$ac_save_LDFLAGS
3521   fi
3523   # check for new heimdal KRB5_DEPRECATED handling
3525   AC_CACHE_CHECK([for KRB5_DEPRECATED define taking an identifier],
3526                 samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER,[
3527     AC_TRY_COMPILE(
3528       [#define KRB5_DEPRECATED 1
3529       #include <krb5.h>],
3530       [],
3531       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=yes,
3532       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=no)])
3534   if test x"$samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER" = x"yes"; then
3535     AC_DEFINE(HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER, 1,
3536                [Whether to use deprecated krb5 interfaces])
3537   fi
3540 # Now we have determined whether we really want ADS support
3541 use_ads=no
3542 if test x"$with_ads_support" != x"no"; then
3543   use_ads=yes
3544   have_gssapi=no
3545   ac_save_LIBS=$LIBS
3547   # now check for gssapi headers.  This is also done here to allow for
3548   # different kerberos include paths
3549   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h gssapi/gssapi_ext.h gssapi/gssapi_krb5.h com_err.h)
3551   ##################################################################
3552   # we might need the k5crypto and com_err libraries on some systems
3553   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3554   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3556   # Heimdal checks.
3557   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3558   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3559   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3561   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3562   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3564   ########################################################
3565   # now see if we can find the krb5 libs in standard paths
3566   # or as specified above
3567   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3568   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3570   ########################################################
3571   # now see if we can find the gssapi libs in standard paths
3572   if test x"$have_gssapi" != x"yes"; then
3573      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3574      AC_CHECK_LIB_EXT(gss, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3575   fi
3576   ################################################################
3577   # test for AD / GSSAPI support being enabled
3578   if test x"$have_gssapi" != xyes ; then
3579         AC_MSG_WARN([Samba cannot be supported without GSSAPI])
3580         use_ads=no
3581   else
3582         AC_DEFINE(HAVE_GSSAPI, , [Whether the platform has GSSAPI support])
3583   fi
3585   # This is for FreeBSD (and possibly others). gss_mech_krb5 is a
3586   # #define to GSS_KRB5_MECHANISM, which is defined in -lgssapi_krb5
3587   # Also, gsskrb5_extract_authz_data_from_sec_context is in -lgssapi_krb5
3588   AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS, GSS_KRB5_MECHANISM,
3589                    [KRB5_LIBS="$KRB5_LIBS -lgssapi_krb5"])
3591   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3592   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3593   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3594   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3595   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3596   AC_CHECK_FUNC_EXT(krb5_c_string_to_key, $KRB5_LIBS)
3597   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3598   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3599   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3600   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3601   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3602   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3603   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3604   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3605   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3606   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3607   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3608   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3609   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3610   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3611   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3612   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3613   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3614   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3615   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3616   AC_CHECK_FUNC_EXT(krb5_make_principal, $KRB5_LIBS)
3617   AC_CHECK_FUNC_EXT(krb5_principal_get_num_comp, $KRB5_LIBS)
3618   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3619   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3620   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3621   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3622   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3623   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3624   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3625   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3626   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3627   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3628   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_alloc, $KRB5_LIBS)
3629   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_set_impersonate, $KRB5_LIBS)
3630   AC_CHECK_FUNC_EXT(krb5_get_creds, $KRB5_LIBS)
3631   AC_CHECK_FUNC_EXT(krb5_get_credentials_for_user, $KRB5_LIBS)
3632   AC_CHECK_FUNC_EXT(krb5_get_host_realm, $KRB5_LIBS)
3633   AC_CHECK_FUNC_EXT(krb5_free_host_realm, $KRB5_LIBS)
3634   AC_CHECK_FUNC_EXT(krb5_get_init_creds_keytab, $KRB5_LIBS)
3635   AC_CHECK_FUNC_EXT(krb5_build_principal_alloc_va, $KRB5_LIBS)
3636   AC_CHECK_FUNC_EXT(krb5_cc_get_lifetime, $KRB5_LIBS)
3637   AC_CHECK_FUNC_EXT(krb5_cc_retrieve_cred, $KRB5_LIBS)
3638   AC_CHECK_FUNC_EXT(krb5_free_checksum_contents, $KRB5_LIBS)
3639   AC_CHECK_FUNC_EXT(krb5_create_checksum, $KRB5_LIBS)
3640   AC_CHECK_FUNC_EXT(krb5_c_make_checksum, $KRB5_LIBS)
3641   AC_CHECK_FUNC_EXT(gss_krb5_import_cred, $KRB5_LIBS)
3642   AC_CHECK_FUNC_EXT(gss_get_name_attribute, $KRB5_LIBS)
3643   AC_CHECK_FUNC_EXT(gsskrb5_extract_authz_data_from_sec_context, $KRB5_LIBS)
3644   AC_CHECK_FUNC_EXT(gss_mech_krb5, $KRB5_LIBS)
3645   AC_CHECK_FUNC_EXT(gss_oid_equal, $KRB5_LIBS)
3646   AC_CHECK_FUNC_EXT(gss_inquire_sec_context_by_oid, $KRB5_LIBS)
3647   AC_CHECK_FUNC_EXT(gss_wrap_iov, $KRB5_LIBS)
3649   # MIT krb5 1.8 does not expose this call (yet)
3650   AC_CHECK_DECLS(krb5_get_credentials_for_user, [], [], [#include <krb5.h>])
3652   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3653   # but does have the symbol
3654   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3656   LIBS="$KRB5_LIBS $LIBS"
3658   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3659           smb_krb5_cv_creds_opt_free_context,
3660           [
3661                 AC_TRY_COMPILE([
3662                     #include <krb5.h>],
3663                     [
3664                         krb5_context ctx;
3665                         krb5_get_init_creds_opt *opt = NULL;
3666                         krb5_get_init_creds_opt_free(ctx, opt);
3667                     ],
3668                     [smb_krb5_cv_creds_opt_free_context=yes],
3669                     [smb_krb5_cv_creds_opt_free_context=no]
3670                 )
3671           ])
3673   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3674         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3675             [Whether krb5_get_init_creds_opt_free takes a context argument])
3676   fi
3678   AC_CACHE_CHECK([for checksum in krb5_checksum],
3679                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3680     AC_TRY_COMPILE([#include <krb5.h>],
3681       [krb5_checksum cksum; cksum.checksum.length = 0;],
3682       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3683       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3685   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3686     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3687                [Whether the krb5_checksum struct has a checksum property])
3688   fi
3690   AC_CACHE_CHECK([for etype in EncryptedData],
3691                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3692     AC_TRY_COMPILE([#include <krb5.h>],
3693       [EncryptedData edata; edata.etype = 0;],
3694       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3695       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3697   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3698     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3699                [Whether the EncryptedData struct has a etype property])
3700   fi
3702   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3703                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3704     AC_TRY_COMPILE([#include <krb5.h>],
3705       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3706       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3707       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3709   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3710     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3711                [Whether the krb5_ap_req struct has a ticket pointer])
3712   fi
3714   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3715                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3716     AC_TRY_COMPILE([#include <krb5.h>],
3717       [krb5_error err; err.e_data = NULL;],
3718       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3719       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3721   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3722     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3723                [Whether the krb5_error struct has a e_data pointer])
3724   fi
3726   AC_CACHE_CHECK([for krb5_crypto type],
3727                 samba_cv_HAVE_KRB5_CRYPTO,[
3728     AC_TRY_COMPILE([#include <krb5.h>],
3729       [krb5_crypto crypto;],
3730       samba_cv_HAVE_KRB5_CRYPTO=yes,
3731       samba_cv_HAVE_KRB5_CRYPTO=no)])
3733   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3734     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3735                [Whether the type krb5_crypto exists])
3736   fi
3738   AC_CACHE_CHECK([for addrtype in krb5_address],
3739                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3740     AC_TRY_COMPILE([#include <krb5.h>],
3741       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3742       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3743       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3745   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3746     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3747                [Whether the krb5_address struct has a addrtype property])
3748   fi
3750   AC_CACHE_CHECK([for addr_type in krb5_address],
3751                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3752     AC_TRY_COMPILE([#include <krb5.h>],
3753       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3754       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3755       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3757   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3758     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3759               [Whether the krb5_address struct has a addr_type property])
3760   fi
3762   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3763                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3764     AC_TRY_COMPILE([#include <krb5.h>],
3765       [krb5_keyblock key; key.keyvalue.data = NULL;],
3766       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3767       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3769   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3770     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3771               [Whether the krb5_keyblock struct has a keyvalue property])
3772   fi
3774   found_arcfour_hmac=no
3775   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3776                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3777     AC_TRY_COMPILE([#include <krb5.h>],
3778       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3779       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3780       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3781   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3782                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3783     AC_TRY_COMPILE([#include <krb5.h>],
3784       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3785       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3786       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3787 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3788 # w.r.t. arcfour and windows, so we must not enable it here
3789   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3790           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3791     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3792               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type definition is available])
3793     found_arcfour_hmac=yes
3794   fi
3795   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC],
3796                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC,[
3797     AC_TRY_COMPILE([#include <krb5.h>],
3798       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC;],
3799       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=yes,
3800       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=no)])
3801   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC" = x"yes"; then
3802     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC,1,
3803               [Whether the ENCTYPE_ARCFOUR_HMAC key type definition is available])
3804     found_arcfour_hmac=yes
3805   fi
3807   AC_CACHE_CHECK([for ENCTYPE_AES128_CTS_HMAC_SHA1_96],
3808                  samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96,[
3809     AC_TRY_COMPILE([#include <krb5.h>],
3810       [krb5_enctype enctype; enctype = ENCTYPE_AES128_CTS_HMAC_SHA1_96;],
3811       samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96=yes,
3812       samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96=no)])
3813   if test x"$samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96" = x"yes"; then
3814     AC_DEFINE(HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96,1,
3815               [Whether the ENCTYPE_AES128_CTS_HMAC_SHA1_96 key type definition is available])
3816   fi
3817   AC_CACHE_CHECK([for ENCTYPE_AES256_CTS_HMAC_SHA1_96],
3818                  samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96,[
3819     AC_TRY_COMPILE([#include <krb5.h>],
3820       [krb5_enctype enctype; enctype = ENCTYPE_AES256_CTS_HMAC_SHA1_96;],
3821       samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96=yes,
3822       samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96=no)])
3823   if test x"$samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96" = x"yes"; then
3824     AC_DEFINE(HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96,1,
3825               [Whether the ENCTYPE_AES256_CTS_HMAC_SHA1_96 key type definition is available])
3826   fi
3828   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3829                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3830     AC_TRY_COMPILE([#include <krb5.h>],
3831       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3832       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3833       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3835   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3836     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3837               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3838   fi
3840   AC_CACHE_CHECK([for KV5M_KEYTAB],
3841                  samba_cv_HAVE_KV5M_KEYTAB,[
3842     AC_TRY_COMPILE([#include <krb5.h>],
3843       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3844       samba_cv_HAVE_KV5M_KEYTAB=yes,
3845       samba_cv_HAVE_KV5M_KEYTAB=no)])
3847   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3848       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3849              [Whether the KV5M_KEYTAB option is available])
3850   fi
3852   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3853                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3854     AC_TRY_COMPILE([#include <krb5.h>],
3855       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3856       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3857       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3859   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3860     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3861               [Whether KRB5_KU_OTHER_CKSUM is available])
3862   fi
3864   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3865                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3866     AC_TRY_COMPILE([#include <krb5.h>],
3867       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3868       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3869       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3871   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3872     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3873               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3874   fi
3876   AC_CACHE_CHECK([for the krb5_princ_component macro],
3877                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3878     AC_TRY_LINK([#include <krb5.h>],
3879       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3880       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3881       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3883   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3884     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3885                [Whether krb5_princ_component is available])
3886   fi
3888   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3889                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3890     AC_TRY_COMPILE([#include <krb5.h>],
3891       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3892       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3893       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3895   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3896     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3897               [Whether krb5_keytab_entry has key member])
3898   fi
3900   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3901                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3902     AC_TRY_COMPILE([#include <krb5.h>],
3903       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3904       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3905       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3907   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3908     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3909               [Whether krb5_keytab_entry has keyblock member])
3910   fi
3912   AC_CACHE_CHECK([for magic in krb5_address],
3913                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3914     AC_TRY_COMPILE([#include <krb5.h>],
3915       [krb5_address addr; addr.magic = 0;],
3916       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3917       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3919   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3920     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3921               [Whether the krb5_address struct has a magic property])
3922   fi
3924   AC_CACHE_CHECK([for WRFILE: keytab support],
3925                 samba_cv_HAVE_WRFILE_KEYTAB,[
3926     AC_TRY_RUN([
3927 #include<krb5.h>
3928   main()
3929   {
3930     krb5_context context;
3931     krb5_keytab keytab;
3933     krb5_init_context(&context);
3934     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3935   }],
3936   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3937   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3939   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3940       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3941                [Whether the WRFILE:-keytab is supported])
3942   fi
3944   AC_CACHE_CHECK([for krb5_realm type],
3945                 samba_cv_HAVE_KRB5_REALM_TYPE,[
3946     AC_TRY_COMPILE([#include <krb5.h>],
3947       [krb5_realm realm;],
3948       samba_cv_HAVE_KRB5_REALM_TYPE=yes,
3949       samba_cv_HAVE_KRB5_REALM_TYPE=no)])
3951   if test x"$samba_cv_HAVE_KRB5_REALM_TYPE" = x"yes"; then
3952     AC_DEFINE(HAVE_KRB5_REALM_TYPE,1,
3953                [Whether the type krb5_realm exists])
3954   fi
3956   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3957                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3958     AC_TRY_COMPILE([#include <krb5.h>],
3959     [
3960     krb5_context context;
3961     krb5_principal principal;
3962     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3963     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3964     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3966   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3967     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3968               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3969   fi
3971   AC_CACHE_CHECK([for krb5_addresses type],
3972                 samba_cv_HAVE_KRB5_ADDRESSES,[
3973     AC_TRY_COMPILE([#include <krb5.h>],
3974       [krb5_addresses addr;],
3975       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3976       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3978   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3979     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3980                [Whether the type krb5_addresses type exists])
3981   fi
3983   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
3984     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
3985         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
3986         AC_TRY_RUN_STRICT([
3987                 #include <stdlib.h>
3988                 #include <krb5.h>
3989                 int main(void) {
3990                         krb5_context context = NULL;
3991                         char *str = NULL;
3992                         krb5_enctype_to_string(context, 1, &str);
3993                         if (str) free (str); 
3994                         return 0;
3995                 }
3996                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3997                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
3998                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
4000     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4001       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4002                 [whether krb5_enctype_to_string takes krb5_context argument])
4003     fi
4005     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4006         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
4007         AC_TRY_RUN_STRICT([
4008                 #include <krb5.h>
4009                 int main(void) {
4010                         char buf[256];
4011                         krb5_enctype_to_string(1, buf, 256);
4012                         return 0;
4013                 }
4014                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4015                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
4016                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
4018     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
4019       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4020                 [whether krb5_enctype_to_string takes size_t argument])
4021     fi
4022   fi
4024   AC_CACHE_CHECK([for krb5_principal_get_realm],
4025                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4026     AC_TRY_LINK([#include <krb5.h>],
4027       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4028       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4029       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4031   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4032     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4033                [Whether the function krb5_principal_get_realm is defined])
4034   fi
4036   AC_CACHE_CHECK([for krb5_princ_realm],
4037                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4038     AC_TRY_LINK([#include <krb5.h>],
4039       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
4040       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
4041       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
4043   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
4044     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
4045                [Whether the macro krb5_princ_realm is defined])
4046   fi
4048   AC_HAVE_DECL(KRB5_PDU_NONE,[#include <krb5.h>])
4050   AC_CACHE_CHECK([for flags in krb5_creds],
4051                 samba_cv_HAVE_FLAGS_IN_KRB5_CREDS,[
4052     AC_TRY_COMPILE([#include <krb5.h>],
4053       [krb5_creds creds; creds.flags.b.initial = 0;],
4054       samba_cv_HAVE_FLAGS_IN_KRB5_CREDS=yes,
4055       samba_cv_HAVE_FLAGS_IN_KRB5_CREDS=no)])
4057   if test x"$samba_cv_HAVE_FLAGS_IN_KRB5_CREDS" = x"yes"; then
4058     AC_DEFINE(HAVE_FLAGS_IN_KRB5_CREDS,1,
4059                [Whether the krb5_creds struct has a flags property])
4060   fi
4061   #
4062   #
4063   # Now the decisions whether we can support krb5
4064   #
4065   # NOTE: all tests should be done before this block!
4066   #
4067   #
4068   if test x"$found_arcfour_hmac" != x"yes"; then
4069     AC_MSG_WARN(arcfour-hmac-md5 encryption type not found in -lkrb5)
4070     use_ads=no
4071   fi
4073   if test x"$ac_cv_func_ext_krb5_set_real_time" != x"yes"; then
4074     AC_MSG_WARN(krb5_set_real_time encryption type not found in -lkrb5)
4075     use_ads=no
4076   fi
4078   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4079     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4080     use_ads=no
4081   fi
4083   if test x"$ac_cv_func_ext_krb5_get_host_realm" != x"yes"
4084   then
4085     AC_MSG_WARN(krb5_get_host_realm not found in -lkrb5)
4086     use_ads=no
4087   fi
4089   if test x"$ac_cv_func_ext_krb5_free_host_realm" != x"yes"
4090   then
4091     AC_MSG_WARN(krb5_free_host_realm not found in -lkrb5)
4092     use_ads=no
4093   fi
4095   if test x"$ac_cv_func_ext_krb5_fwd_tgt_creds" != x"yes"
4096   then
4097     AC_MSG_WARN(krb5_fwd_tgt_creds not found in -lkrb5)
4098     use_ads=no
4099   fi
4101   if test x"$ac_cv_func_ext_krb5_get_init_creds_opt_alloc" != x"yes"
4102   then
4103     AC_MSG_WARN(krb5_get_init_creds_opt_alloc found in -lkrb5)
4104     use_ads=no
4105   fi
4107   if test x"$smb_krb5_cv_creds_opt_free_context" != x"yes"
4108   then
4109     AC_MSG_WARN(krb5_get_init_creds_opt_free not found or was too old in -lkrb5)
4110     use_ads=no
4111   fi
4113   if test x"$ac_cv_func_ext_krb5_get_renewed_creds" != x"yes"
4114   then
4115     AC_MSG_WARN(krb5_get_renewed_creds not found in -lkrb5)
4116     use_ads=no
4117   fi
4119   if test x"$ac_cv_func_ext_krb5_principal_compare_any_realm" != x"yes"
4120   then
4121     AC_MSG_WARN(krb5_principal_compare_any_realm not found in -lkrb5)
4122     use_ads=no
4123   fi
4125   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -o \
4126           x"$ac_cv_func_ext_krb5_c_string_to_key" != x"yes"
4127   then
4128         if test x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes" -o \
4129              x"$ac_cv_func_ext_krb5_string_to_key_salt" != x"yes"
4130         then
4131               AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4132               use_ads=no
4133         fi
4134   fi
4136   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4137           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4138   then
4139     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4140     use_ads=no
4141   fi
4143   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4144           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4145   then
4146     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4147     use_ads=no
4148   fi
4150   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes"
4151   then
4152     AC_MSG_WARN(krb5_c_verify_checksum not found in -lkrb5)
4153     use_ads=no
4154   fi
4156   if test x"$ac_cv_func_ext_gss_wrap_iov" != x"yes" ; then
4157     AC_MSG_WARN(gss_wrap_iov not found in -lgssapi)
4158     use_ads=no
4159   fi
4161   if test x"$ac_cv_func_ext_gss_get_name_attribute" != x"yes" ; then
4162     if test x"$ac_cv_func_ext_gsskrb5_extract_authz_data_from_sec_context" != x"yes" -o \
4163             x"$ac_cv_func_ext_gss_inquire_sec_context_by_oid" != x"yes"
4164     then
4165       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)
4166       use_ads=no
4167     fi
4168   fi
4170   if test x"$use_ads" = x"yes"; then
4171     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4172     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4173   else
4174     if test x"$with_ads_support" = x"yes"; then
4175         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4176     else
4177         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4178     fi
4179     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4180     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4181     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4182     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4183     AC_REMOVE_DEFINE(HAVE_GSSAPI)
4184     KRB5_LIBS=""
4185     with_ads_support=no
4186   fi
4187   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4188   AC_MSG_RESULT([$use_ads])
4190 LIBS="$ac_save_LIBS"
4193 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4194 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4197 ########################################################
4198 # Compile with DNS Updates support?
4200 with_dnsupdate_support=auto
4201 AC_MSG_CHECKING([whether to enable DNS Updates support])
4203 AC_ARG_WITH(dnsupdate,
4204 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default=auto)])],
4205 [ case "$withval" in
4206     yes|no)
4207         with_dnsupdate_support=$withval
4208         ;;
4209   esac ])
4211 AC_MSG_RESULT($with_dnsupdate_support)
4213 if test x"$with_dnsupdate_support" != x"no"; then
4215   ################################################################
4216   # first test for AD / GSSAPI support being enabled
4217         if test x"$have_gssapi" != xyes -o x"$use_ads" != xyes ; then
4218                 if test x"$with_dnsupdate_support" = x"yes" ; then
4219                         AC_MSG_ERROR(DNS Updates support only possible with AD and GSSAPI support)
4220                 else
4221                         AC_MSG_NOTICE(DNS Updates support only possible with AD and GSSAPI support)
4222                         with_dnsupdate_support=no
4223                 fi
4224         fi
4227 if test x"$with_dnsupdate_support" != x"no"; then
4228       AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4231   # finally print out the result:
4232 AC_MSG_CHECKING(whether DNS Updates support is used)
4233 AC_MSG_RESULT([$with_dnsupdate_support])
4236 #################################################
4237 # check for automount support
4238 AC_MSG_CHECKING(whether to use automount)
4239 AC_ARG_WITH(automount,
4240 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4241 [ case "$withval" in
4242   yes)
4243     AC_MSG_RESULT(yes)
4244     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4245     ;;
4246   *)
4247     AC_MSG_RESULT(no)
4248     ;;
4249   esac ],
4250   AC_MSG_RESULT(no)
4253 #################################################
4254 # Check for a PAM clear-text auth, accounts, password
4255 # and session support. Most PAM implementations keep their
4256 # headers in /usr/include/security. Darwin keeps its in
4257 # /usr/include/pam.
4259 with_pam_for_crypt=no
4260 try_pam=auto
4261 AC_MSG_CHECKING(whether to try PAM support)
4262 AC_ARG_WITH(pam,
4263 [AS_HELP_STRING([--with-pam], [Include PAM support (default=auto)])],
4264 [ case "$withval" in
4265   yes|no|auto)
4266     try_pam=$withval
4267     ;;
4268   esac
4270 AC_MSG_RESULT([$try_pam])
4272 use_pam=no
4273 create_pam_modules=no
4274 if test x"${try_pam}" != x"no";then
4275         use_pam=yes
4276         create_pam_modules=yes
4278         # Most systems have PAM headers in /usr/include/security, but Darwin
4279         # has them in /usr/include/pam.
4280         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4281         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4282                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4283                 if test x"${try_pam}" = x"yes";then
4284                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4285                 fi
4286                 use_pam=no
4287                 create_pam_modules=no
4288         fi
4290         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4291         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4292                 if test x"${try_pam}" = x"yes";then
4293                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4294                 fi
4295                 use_pam=no
4296                 create_pam_modules=no
4297         fi
4299         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4300                 #if HAVE_SECURITY_PAM_APPL_H
4301                 #include <security/pam_appl.h>
4302                 #endif
4303                 #if HAVE_PAM_PAM_APPL_H
4304                 #include <pam/pam_appl.h>
4305                 #endif
4306         ]])
4307         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4308                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4309                 if test x"${try_pam}" = x"yes";then
4310                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4311        fi
4312                 create_pam_modules=no
4313     fi
4315         if test x"$use_pam" = x"yes"; then
4316     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4317                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4318                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4319     with_pam_for_crypt=yes
4321                 if test x"$create_pam_modules" = x"yes"; then
4322                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4323                         # this checks are optional,
4324                         # we don't care about the results here
4325                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4326                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4327                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4328                 else
4329                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4330                 fi
4331         fi
4332         AC_MSG_CHECKING(whether to use PAM support)
4333         AC_MSG_RESULT([$use_pam])
4335         AC_MSG_CHECKING(whether to have PAM MODULES support)
4336         AC_MSG_RESULT([$create_pam_modules])
4338         AC_TRY_COMPILE([
4339                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4340                 #include <security/pam_appl.h>
4341                 #elif defined(HAVE_PAM_PAM_APPL_H)
4342                 #include <pam/pam_appl.h>
4343                 #endif],[
4344                 pam_set_item(0, PAM_RHOST, 0);
4345                 ],
4346                 AC_DEFINE(HAVE_PAM_RHOST, 1,
4347                           [Define to 1 if PAM_RHOST is available]),[])
4349         AC_TRY_COMPILE([
4350                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4351                 #include <security/pam_appl.h>
4352                 #elif defined(HAVE_PAM_PAM_APPL_H)
4353                 #include <pam/pam_appl.h>
4354                 #endif],[
4355                 pam_set_item(0, PAM_TTY, 0);
4356                 ],
4357                 AC_DEFINE(HAVE_PAM_TTY, 1,
4358                           [Define to 1 if PAM_TTY is available]),[])
4360 fi # try_pam != no
4362 #################################################
4363 # check for PAM_RADIO_TYPE
4364 AC_TRY_COMPILE([
4365 #if (!defined(LINUX))
4367 #define PAM_EXTERN extern
4368 #if defined(HAVE_SECURITY_PAM_APPL_H)
4369 #include <security/pam_appl.h>
4370 #elif defined(HAVE_PAM_PAM_APPL_H)
4371 #include <pam/pam_appl.h>
4372 #endif
4374 #endif
4376 #if defined(HAVE_SECURITY_PAM_MODULES_H)
4377 #include <security/pam_modules.h>
4378 #elif defined(HAVE_PAM_PAM_MODULES_H)
4379 #include <pam/pam_modules.h>
4380 #endif
4382 #if defined(HAVE_SECURITY__PAM_MACROS_H)
4383 #include <security/_pam_macros.h>
4384 #elif defined(HAVE_PAM__PAM_MACROS_H)
4385 #include <pam/_pam_macros.h>
4386 #endif
4388 #ifdef HAVE_SECURITY_PAM_EXT_H
4389 #include <security/pam_ext.h>
4390 #endif
4392 [int i; i = PAM_RADIO_TYPE; ],
4393 AC_DEFINE(HAVE_PAM_RADIO_TYPE, 1, [Define to 1 if PAM_RADIO_TYPE is available]),[])
4395 #################################################
4396 # check for pam_smbpass support
4397 PAM_MODULES=""
4398 INSTALL_PAM_MODULES=""
4399 UNINSTALL_PAM_MODULES=""
4401 try_pam_smbpass=auto
4402 AC_MSG_CHECKING(whether to use pam_smbpass)
4403 AC_ARG_WITH(pam_smbpass,
4404 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=auto)])],
4405 [ case "$withval" in
4406   yes|no|auto)
4407     try_pam_smbpass=$withval
4408   ;;
4409   *)
4410     AC_MSG_ERROR([valid options are yes,no,auto])
4411   ;;
4412   esac
4415 if test x"${try_pam_smbpass}" = xno ; then
4416         use_pam_smbpass=no
4417 else
4418         use_pam_smbpass=yes
4419         # Conditions under which pam_smbpass can't be built.
4420         if test x"$BLDSHARED" != xtrue ; then
4421                 if test x"${try_pam_smbpass}" = xyes ; then
4422                         AC_MSG_ERROR([No support for shared modules])
4423                 fi
4424                 use_pam_smbpass=no
4425         elif test x"$create_pam_modules" != xyes ; then
4426                 if test x"${try_pam_smbpass}" = xyes ; then
4427                         AC_MSG_ERROR([No support for PAM MODULES])
4428                 fi
4429                 use_pam_smbpass=no
4430         fi
4432         if test x"${use_pam_smbpass}" = xyes ; then 
4433                 PAM_MODULES="pam_smbpass"
4434                 INSTALL_PAM_MODULES="installpammodules"
4435                 UNINSTALL_PAM_MODULES="uninstallpammodules"
4436         fi
4438 AC_MSG_RESULT([$use_pam_smbpass])
4442 ## moved after the check for -lcrypt in order to
4443 ## ensure that the necessary libraries are included
4444 ## check checking for truncated salt.  Wrapped by the
4445 ## $with_pam_for_crypt variable as above   --jerry
4447 if test $with_pam_for_crypt = no; then
4448 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4449 crypt_LIBS="$LIBS"
4450 LIBS="$AUTH_LIBS $LIBS"
4451 AC_TRY_RUN([#include "${srcdir-.}/../tests/crypttest.c"],
4452         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4453 LIBS="$crypt_LIBS"])
4454 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4455         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4459 #################################################
4460 # check for a NISPLUS_HOME support
4461 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4462 AC_ARG_WITH(nisplus-home,
4463 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4464 [ case "$withval" in
4465   yes)
4466     AC_MSG_RESULT(yes)
4467     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4468     ;;
4469   *)
4470     AC_MSG_RESULT(no)
4471     ;;
4472   esac ],
4473   AC_MSG_RESULT(no)
4476 #################################################
4477 # check for syslog logging
4478 AC_MSG_CHECKING(whether to use syslog logging)
4479 AC_ARG_WITH(syslog,
4480 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4481 [ case "$withval" in
4482   yes)
4483     AC_MSG_RESULT(yes)
4484     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4485     ;;
4486   *)
4487     AC_MSG_RESULT(no)
4488     ;;
4489   esac ],
4490   AC_MSG_RESULT(no)
4493 #################################################
4494 # check for custom syslog facility
4495 AC_MSG_CHECKING(whether to use a custom syslog facility)
4496 AC_ARG_WITH(syslog-facility,
4497 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4499   if test "$withval" = "no" ; then
4500     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4501   else
4502      if test "$withval" != "yes" ; then
4503         syslog_facility="$withval"
4504         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4505      fi
4506   fi
4509 #################################################
4510 # check for experimental disk-quotas support
4512 samba_cv_WITH_QUOTAS=auto
4513 samba_cv_SYSQUOTA_FOUND=no
4515 AC_MSG_CHECKING(whether to try disk-quotas support)
4516 AC_ARG_WITH(quotas,
4517 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4518 [ case "$withval" in
4519   yes)
4520     AC_MSG_RESULT(yes)
4521     samba_cv_WITH_QUOTAS=yes
4522     ;;
4523   auto)
4524     AC_MSG_RESULT(auto)
4525     samba_cv_WITH_QUOTAS=auto
4526     ;;
4527   no)
4528     AC_MSG_RESULT(no)
4529     samba_cv_WITH_QUOTAS=no
4530     ;;
4531   *)
4532     AC_MSG_RESULT(${samba_cv_WITH_QUOTAS})
4533     ;;
4534   esac ],
4535   AC_MSG_RESULT(${samba_cv_WITH_QUOTAS})
4538 #############################################
4539 # only check for quota stuff if --with-quotas
4540 if test x"$samba_cv_WITH_QUOTAS" != x"no"; then
4542 case "$host_os" in
4543         # on linux we didn't need to test we have builtin support
4544         *linux*)
4545             samba_cv_SYSQUOTA_FOUND=yes
4546             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4547             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4548             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4549             AC_MSG_RESULT(yes)
4551             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4552             AC_MSG_RESULT(yes)
4553             ;;
4554         *solaris*)
4555             # need to set this define when using static linking (BUG 1473)
4556             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4557             ;;
4558         *)
4559             ;;
4560 esac
4562 # some broken header files need this
4563 AC_CHECK_HEADER(asm/types.h,[
4564             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4565             AC_ADD_INCLUDE(<asm/types.h>)
4566             ])
4568 # For quotas on Veritas VxFS filesystems
4569 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4571 # For quotas on XFS filesystems, Linux style
4572 AC_CHECK_HEADERS(xfs/xqm.h,[
4573             AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4574         ])
4576 # For sys/quota.h and linux/quota.h
4577 AC_CHECK_HEADERS(sys/quota.h)
4579 # For quotas on BSD systems
4580 AC_CHECK_HEADERS(ufs/ufs/quota.h)
4583 if test x"$ac_cv_header_xfs_xqm_h" != x"yes"; then
4584 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4585 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4586 AC_TRY_COMPILE([
4587 #include "confdefs.h"
4588 #ifdef HAVE_SYS_TYPES_H
4589 #include <sys/types.h>
4590 #endif
4591 #ifdef HAVE_ASM_TYPES_H
4592 #include <asm/types.h>
4593 #endif
4594 #include <sys/quota.h>
4595 ],[int i = Q_XGETQUOTA;],
4596 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4597 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4598         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4602 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4603 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4604 AC_TRY_COMPILE([
4605 #include "confdefs.h"
4606 #ifdef HAVE_SYS_QUOTA_H
4607 #include <sys/quota.h>
4608 #endif
4610 struct dqblk D;
4611 D.dqb_fsoftlimit = 0;],
4612 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4613 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4614         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4617 ##################
4618 # look for a working quota system
4620 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4621 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4622 AC_TRY_RUN_STRICT([
4623 #define HAVE_QUOTACTL_4A 1
4624 #define AUTOCONF_TEST 1
4625 #include "confdefs.h"
4626 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4627            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4628 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4629     samba_cv_SYSQUOTA_FOUND=yes;
4630     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4631     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4635 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4636 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4637 AC_TRY_RUN_STRICT([
4638 #define HAVE_QUOTACTL_4B 1
4639 #define AUTOCONF_TEST 1
4640 #include "confdefs.h"
4641 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4642            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4643 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4644     samba_cv_SYSQUOTA_FOUND=yes;
4645     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4646     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4647     AC_CHECK_MEMBERS([struct dqblk.dqb_curbytes], # Darwin bytecount style
4648         [ AC_DEFINE([HAVE_STRUCT_DQBLK_DQB_CURBYTES],[1],[darwin style quota bytecount])],,
4649         [#include <sys/typeÑ•.h>
4650         #include <sys/quota.h>])
4655 AC_CACHE_CHECK([for NFS QUOTAS],samba_cv_HAVE_NFS_QUOTAS,[
4656 AC_TRY_COMPILE([
4657 #include <rpc/rpc.h>
4658 #include <rpc/types.h>
4659 #include <rpcsvc/rquota.h>
4660 #ifdef HAVE_RPC_NETTYPE_H
4661 #include <rpc/nettype.h>
4662 #endif
4663 #include <rpc/xdr.h>
4664 ],[clnt_create("", RQUOTAPROG, RQUOTAVERS, "udp");],
4665                    samba_cv_HAVE_NFS_QUOTAS=yes, samba_cv_HAVE_NFS_QUOTAS=no)])
4667 if test x"$samba_cv_HAVE_NFS_QUOTAS" = x"yes"; then
4668     AC_DEFINE(HAVE_NFS_QUOTAS,1,[NFS quota support is available])
4669     AC_CHECK_MEMBER(struct getquota_rslt.getquota_rslt_u,
4670                 AC_DEFINE(HAVE_GETQUOTA_RSLT_GETQUOTA_RSLT_U, 1, [Defined if struct getquota_rslt has getquota_rslt_u]),,
4671                 [#include <rpcsvc/rquota.h>])
4674 #################################################
4675 # check for mntent.h and struct mntent
4676 AC_CHECK_HEADERS(mntent.h)
4677 #################################################
4678 # check for setmntent,getmntent,endmntent
4679 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4681 #################################################
4682 # check for devnm.h and struct mntent
4683 AC_CHECK_HEADERS(devnm.h)
4684 #################################################
4685 # check for devnm
4686 AC_CHECK_FUNCS(devnm)
4688 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4689 if test x"$samba_cv_SYSQUOTA_FOUND" = x"yes"; then
4690         AC_MSG_RESULT(yes)
4691         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4692         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4693 else
4694     AC_MSG_RESULT(no)
4695     AC_MSG_CHECKING(whether to use the old quota support)
4696     if test x"$samba_cv_WITH_QUOTAS" = x"yes"; then
4697         AC_DEFINE(WITH_QUOTAS,1,[Whether to use old quota support])
4698         AC_MSG_RESULT(yes)
4699     else
4700         AC_MSG_RESULT(no)
4701     fi
4704 ####################
4705 # End of quota check samba_cv_WITH_QUOTAS
4708 #################################################
4709 # check for experimental utmp accounting
4711 AC_MSG_CHECKING(whether to support utmp accounting)
4712 WITH_UTMP=yes
4713 AC_ARG_WITH(utmp,
4714 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
4715 [ case "$withval" in
4716   no)
4717                 WITH_UTMP=no
4718                 ;;
4719   *)
4720                 WITH_UTMP=yes
4721                 ;;
4722   esac ],
4725 # utmp requires utmp.h
4726 # Note similar check earlier, when checking utmp details.
4728 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4729         utmp_no_reason=", no utmp.h on $host_os"
4730         WITH_UTMP=no
4733 if test x"$WITH_UTMP" = x"yes" -a x"$samba_cv_HAVE_UX_UT_LINE" != x"yes"; then
4734         utmp_no_reason=", sizeof ut_line not ok"
4735         WITH_UTMP=no
4738 # Display test results
4740 if test x"$WITH_UTMP" = x"yes"; then
4741         AC_MSG_RESULT(yes)
4742         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4743 else
4744         AC_MSG_RESULT(no$utmp_no_reason)
4748 #################################################
4749 # these tests are taken from the GNU fileutils package
4750 AC_CHECKING(how to get filesystem space usage)
4751 space=no
4753 # Perform only the link test since it seems there are no variants of the
4754 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4755 # because that got a false positive on SCO OSR5.  Adding the declaration
4756 # of a `struct statvfs' causes this test to fail (as it should) on such
4757 # systems.  That system is reported to work fine with STAT_STATFS4 which
4758 # is what it gets when this test fails.
4759 if test $space = no; then
4760   # SVR4
4761   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
4762                  [AC_TRY_LINK([#include <sys/types.h>
4763 #include <sys/statvfs.h>],
4764                               [struct statvfs fsd; statvfs (0, &fsd);],
4765                               fu_cv_sys_stat_statvfs=yes,
4766                               fu_cv_sys_stat_statvfs=no)])
4767   if test $fu_cv_sys_stat_statvfs = yes; then
4768     space=yes
4769     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
4770   fi
4773 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
4774 # This is not the case on ancient Linux systems.
4776 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
4777     AC_TRY_COMPILE([#include <sys/types.h>
4778 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
4779         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
4780 if test x"$samba_cv_fsid_int" = x"yes"; then
4781     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
4784 # fsusage.c assumes that statvfs has an f_frsize entry. Some weird
4785 # systems use f_bsize.
4786 AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [
4787     AC_TRY_COMPILE([#include <sys/types.h>
4788 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0],
4789         samba_cv_frsize=yes,samba_cv_frsize=no)])
4790 if test x"$samba_cv_frsize" = x"yes"; then
4791     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
4794 # Some systems use f_flag in struct statvfs while others use f_flags
4795 AC_CACHE_CHECK([that statvfs.statvfs_f_flag works],samba_cv_statvfs_f_flag, [
4796     AC_TRY_COMPILE([#include <sys/types.h>
4797 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flag = 0],
4798         samba_cv_statvfs_f_flag=yes,samba_cv_statvfs_f_flag=no)])
4799 if test x"$samba_cv_statvfs_f_flag" = x"yes"; then
4800     AC_DEFINE(HAVE_STATVFS_F_FLAG, 1, [Whether statvfs.f_flag exists])
4803 AC_CACHE_CHECK([that statvfs.statvfs_f_flags works],samba_cv_statvfs_f_flags, [
4804     AC_TRY_COMPILE([#include <sys/types.h>
4805 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flags = 0],
4806         samba_cv_statvfs_f_flags=yes,samba_cv_statvfs_f_flags=no)])
4807 if test x"$samba_cv_statvfs_f_flags" = x"yes"; then
4808     AC_DEFINE(HAVE_STATVFS_F_FLAGS, 1, [Whether statvfs.f_flags exists])
4811 if test $space = no; then
4812   # DEC Alpha running OSF/1
4813   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
4814   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
4815   [AC_TRY_RUN([
4816 #include <sys/param.h>
4817 #include <sys/types.h>
4818 #include <sys/mount.h>
4819   main ()
4820   {
4821     struct statfs fsd;
4822     fsd.f_fsize = 0;
4823     return (statfs (".", &fsd, sizeof (struct statfs)));
4824   }],
4825   fu_cv_sys_stat_statfs3_osf1=yes,
4826   fu_cv_sys_stat_statfs3_osf1=no,
4827   fu_cv_sys_stat_statfs3_osf1=no)])
4828   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
4829   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
4830     space=yes
4831     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
4832   fi
4835 if test $space = no; then
4836 # AIX
4837   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
4838 member (AIX, 4.3BSD)])
4839   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
4840   [AC_TRY_RUN([
4841 #ifdef HAVE_SYS_PARAM_H
4842 #include <sys/param.h>
4843 #endif
4844 #ifdef HAVE_SYS_MOUNT_H
4845 #include <sys/mount.h>
4846 #endif
4847 #ifdef HAVE_SYS_VFS_H
4848 #include <sys/vfs.h>
4849 #endif
4850   main ()
4851   {
4852   struct statfs fsd;
4853   fsd.f_bsize = 0;
4854   return (statfs (".", &fsd));
4855   }],
4856   fu_cv_sys_stat_statfs2_bsize=yes,
4857   fu_cv_sys_stat_statfs2_bsize=no,
4858   fu_cv_sys_stat_statfs2_bsize=no)])
4859   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
4860   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
4861     space=yes
4862     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
4863   fi
4866 if test $space = no; then
4867 # SVR3
4868   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
4869   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
4870   [AC_TRY_RUN([#include <sys/types.h>
4871 #include <sys/statfs.h>
4872   main ()
4873   {
4874   struct statfs fsd;
4875   return (statfs (".", &fsd, sizeof fsd, 0));
4876   }],
4877     fu_cv_sys_stat_statfs4=yes,
4878     fu_cv_sys_stat_statfs4=no,
4879     fu_cv_sys_stat_statfs4=no)])
4880   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
4881   if test $fu_cv_sys_stat_statfs4 = yes; then
4882     space=yes
4883     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
4884   fi
4887 if test $space = no; then
4888 # 4.4BSD and NetBSD
4889   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
4890 member (4.4BSD and NetBSD)])
4891   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
4892   [AC_TRY_RUN([#include <sys/types.h>
4893 #ifdef HAVE_SYS_PARAM_H
4894 #include <sys/param.h>
4895 #endif
4896 #ifdef HAVE_SYS_MOUNT_H
4897 #include <sys/mount.h>
4898 #endif
4899   main ()
4900   {
4901   struct statfs fsd;
4902   fsd.f_fsize = 0;
4903   return (statfs (".", &fsd));
4904   }],
4905   fu_cv_sys_stat_statfs2_fsize=yes,
4906   fu_cv_sys_stat_statfs2_fsize=no,
4907   fu_cv_sys_stat_statfs2_fsize=no)])
4908   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
4909   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
4910     space=yes
4911         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
4912   fi
4915 if test $space = no; then
4916   # Ultrix
4917   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
4918   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
4919   [AC_TRY_RUN([#include <sys/types.h>
4920 #ifdef HAVE_SYS_PARAM_H
4921 #include <sys/param.h>
4922 #endif
4923 #ifdef HAVE_SYS_MOUNT_H
4924 #include <sys/mount.h>
4925 #endif
4926 #ifdef HAVE_SYS_FS_TYPES_H
4927 #include <sys/fs_types.h>
4928 #endif
4929   main ()
4930   {
4931   struct fs_data fsd;
4932   /* Ultrix's statfs returns 1 for success,
4933      0 for not mounted, -1 for failure.  */
4934   return (statfs (".", &fsd) != 1);
4935   }],
4936   fu_cv_sys_stat_fs_data=yes,
4937   fu_cv_sys_stat_fs_data=no,
4938   fu_cv_sys_stat_fs_data=no)])
4939   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
4940   if test $fu_cv_sys_stat_fs_data = yes; then
4941     space=yes
4942     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
4943   fi
4946 #################################################
4947 # check for cluster extensions
4949 AC_MSG_CHECKING(cluster support)
4950 AC_ARG_WITH(cluster-support,
4951 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
4953 if test x"$with_cluster_support" = x ; then
4954         with_cluster_support="auto"
4957 AC_MSG_RESULT($with_cluster_support)
4959 AC_ARG_WITH(ctdb,
4960 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
4961 [ case "$withval" in
4962   yes|no)
4963     AC_MSG_WARN([--with-ctdb called without argument])
4964     ;;
4965   *)
4966     CTDB_CPPFLAGS="-I$withval/include"
4967     ;;
4968   esac])
4970 AC_ARG_ENABLE(old-ctdb,
4971         [AS_HELP_STRING([--enable-old-ctdb],
4972                 [Enable build against (too) old ctdb version (default=no)])],,
4973                 [enable_old_ctdb=no])
4976 if test "$with_cluster_support" != "no" ; then
4978 AC_MSG_NOTICE(checking whether cluster support is available)
4980 have_cluster_support="yes"
4981 ctdb_broken="no"
4983 SAVED_CPPFLAGS="$CPPFLAGS"
4984 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS} $CTDB_CPPFLAGS"
4986 AC_CHECK_HEADERS(ctdb.h ctdb_private.h,,,[
4987 #include "confdefs.h"
4988 #define NO_CONFIG_H
4989 #include "replace.h"
4990 #include "system/wait.h"
4991 #include "system/network.h"
4992 #define private #error __USED_RESERVED_WORD_private__
4993 #include <talloc.h>
4994 #include <tdb.h>
4995 #include <ctdb.h>
4998 if test "x$have_cluster_support" = "xyes" -a \
4999         "x$ac_cv_header_ctdb_h" != "xyes"
5000 then
5001         have_cluster_support=no
5002         ctdb_broken="ctdb.h is required for cluster support"
5005 if test "x$have_cluster_support" = "xyes" -a \
5006         "x$ac_cv_header_ctdb_h" != "xyes"
5007 then
5008         have_cluster_support=no
5009         ctdb_broken="ctdb_private.h is required for cluster support"
5013 if test "x$have_cluster_support" = "xyes" ; then
5014         AC_HAVE_DECL(CTDB_CONTROL_TRANS3_COMMIT,[
5015         #include "confdefs.h"
5016         #define NO_CONFIG_H
5017         #include "replace.h"
5018         #include "system/wait.h"
5019         #include "system/network.h"
5020         #include <talloc.h>
5021         #include <tdb.h>
5022         #include <ctdb.h>
5023         #include <ctdb_private.h>
5024         ])
5025         if test x"$ac_cv_have_CTDB_CONTROL_TRANS3_COMMIT_decl" != x"yes"; then
5026                 ctdb_broken="ctdb transaction support missing or too old"
5027                 have_cluster_support=no
5028         fi
5031 if test "x$have_cluster_support" = "xyes" ; then
5032         AC_HAVE_DECL(CTDB_CONTROL_SCHEDULE_FOR_DELETION,[
5033         #include "confdefs.h"
5034         #define NO_CONFIG_H
5035         #include "replace.h"
5036         #include "system/wait.h"
5037         #include "system/network.h"
5038         #include <talloc.h>
5039         #include <tdb.h>
5040         #include <ctdb.h>
5041         #include <ctdb_private.h>
5042         ])
5043         if test x"$ac_cv_have_CTDB_CONTROL_SCHEDULE_FOR_DELETION_decl" != x"yes"
5044         then
5045                 if test "x$enable_old_ctdb" = "xyes" ; then
5046                         AC_MSG_WARN([ignoring missing SCHEDULE_FOR_DELETION (--enable-old-ctdb)])
5047                 else
5048                         ctdb_broken="support for SCHEDULE_FOR_DELETION control missing"
5049                         have_cluster_support=no
5050                 fi
5051         fi
5054 if test "x$have_cluster_support" = "xyes" ; then
5055         AC_HAVE_DECL(CTDB_CONTROL_CHECK_SRVIDS,[
5056         #include "confdefs.h"
5057         #define NO_CONFIG_H
5058         #include "replace.h"
5059         #include "system/wait.h"
5060         #include "system/network.h"
5061         #include <talloc.h>
5062         #include <tdb.h>
5063         #include <ctdb.h>
5064         #include <ctdb_private.h>
5065         ])
5066         if test x"$ac_cv_have_CTDB_CONTROL_CHECK_SRVIDS_decl" != x"yes"
5067         then
5068                 if test "x$enable_old_ctdb" = "xyes" ; then
5069                         AC_MSG_WARN([ignoring missing CHECK_SRVIDS (--enable-old-ctdb)])
5070                 else
5071                         ctdb_broken="support for CHECK_SRVIDS control missing"
5072                         have_cluster_support=no
5073                 fi
5074         fi
5077 AC_ARG_ENABLE([ctdb-readonly-records],
5078         AS_HELP_STRING([--enable-ctdb-readonly-records],
5079                 [Turn on CTDB readonly records support (default=yes)]),
5080         [want_ctdb_readonly=$enableval],
5081         [want_ctdb_readonly=yes])
5083 if test "x$have_cluster_support" = "xyes" -a "x$want_ctdb_readonly" = "xyes" ; then
5084         AC_HAVE_DECL(CTDB_WANT_READONLY,[
5085         #include "confdefs.h"
5086         #define NO_CONFIG_H
5087         #include "replace.h"
5088         #include "system/wait.h"
5089         #include "system/network.h"
5090         #include <talloc.h>
5091         #include <tdb.h>
5092         #include <ctdb.h>
5093         ])
5095         if test "x$ac_cv_have_CTDB_WANT_READONLY_decl" != "xyes" ; then
5096                 if test "x$enable_old_ctdb" = "xyes" ; then
5097                         AC_MSG_WARN([ignoring missing READONLY support (--enable-old-ctdb)])
5098                 else
5099                         ctdb_broken="support for CTDB readonly records missing"
5100                         have_cluster_support=no
5101                 fi
5102         fi
5105 if test "x$have_cluster_support" = "xyes" ; then
5106         # In ctdb 1.0.57, ctdb_control_tcp was temporarily renamed
5107         # to ctdb_tcp_client.
5108         AC_CHECK_TYPE(struct ctdb_tcp_client,[
5109                 AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
5110         ],,[
5111         #include "confdefs.h"
5112         #define NO_CONFIG_H
5113         #include "replace.h"
5114         #include "system/wait.h"
5115         #include "system/network.h"
5116         #include <talloc.h>
5117         #include <tdb.h>
5118         #include <ctdb.h>
5119         #include <ctdb_private.h>
5120         ])
5123 if test "x$have_cluster_support" = "xyes" ; then
5124         AC_CHECK_TYPE(struct ctdb_control_tcp,[
5125                 AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5126         ],[
5127                 ctdb_broken="missing struct ctdb_control_tcp"
5128                 have_cluster_support=no
5129         ],[
5130         #include "confdefs.h"
5131         #define NO_CONFIG_H
5132         #include "replace.h"
5133         #include "system/wait.h"
5134         #include "system/network.h"
5135         #include <talloc.h>
5136         #include <tdb.h>
5137         #include <ctdb.h>
5138         #include <ctdb_private.h>
5139         ])
5142 # test for optional ipv6 support in ctdb:
5143 if test "x$have_cluster_support" = "xyes" ; then
5144         AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5145                 AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5146         ],,[
5147         #include "confdefs.h"
5148         #define NO_CONFIG_H
5149         #include "replace.h"
5150         #include "system/wait.h"
5151         #include "system/network.h"
5152         #include <talloc.h>
5153         #include <tdb.h>
5154         #include <ctdb.h>
5155         #include <ctdb_private.h>
5156         ])
5159 CPPFLAGS="$SAVED_CPPFLAGS"
5161 fi # (if test "$with_cluster_support" != "no")
5163 if test x"$have_cluster_support" = "xno" ; then
5164         case "$with_cluster_support" in
5165         yes)
5166                 AC_MSG_ERROR(["cluster support not available: $ctdb_broken"])
5167                 ;;
5168         auto)
5169                 AC_MSG_WARN(["cluster support not available: $ctdb_broken"])
5170                 ;;
5171         esac
5172         with_cluster_support=no
5175 if test "x$with_cluster_support" != "xno"; then
5176     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5177     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5178     AC_MSG_NOTICE(Building with cluster support)
5179 else
5180     AC_MSG_NOTICE(Building without cluster support)
5184 #################################################
5185 # check for rtnetlink
5187 AC_CHECK_HEADERS([linux/netlink.h],
5188   AC_CHECK_HEADERS([linux/rtnetlink.h],[],[],
5189                    [#include <bits/sockaddr.h>
5190                     #include <linux/netlink.h>]),
5191   [],[#include <bits/sockaddr.h>])
5193 #################################################
5194 # check for ACL support
5196 AC_MSG_CHECKING(whether to support ACLs)
5197 AC_ARG_WITH(acl-support,
5198 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5199 [ case "$withval" in
5200         yes|no)
5201                 with_acl_support="$withval"
5202                 ;;
5203   esac ])
5205 if test x"$with_acl_support" = x ; then
5206         with_acl_support="auto"
5209 AC_MSG_RESULT($with_acl_support)
5211 if test x"$with_acl_support" = x"no"; then
5212         AC_MSG_RESULT(Disabling ACL support)
5213 else
5214         AC_MSG_NOTICE(checking whether ACL support is available:)
5215         case "$host_os" in
5216         *sysv5*)
5217                 AC_MSG_NOTICE(Using UnixWare ACLs)
5218                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5219                 default_static_modules="$default_static_modules vfs_solarisacl"
5220                 ;;
5221         *solaris*)
5222                 AC_MSG_NOTICE(Using solaris ACLs)
5223                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5224                 ACL_LIBS="$ACL_LIBS -lsec"
5225                 default_static_modules="$default_static_modules vfs_solarisacl"
5226                 ;;
5227         *hpux*)
5228                 AC_MSG_NOTICE(Using HPUX ACLs)
5229                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5230                 default_static_modules="$default_static_modules vfs_hpuxacl"
5231                 ;;
5232         *irix*)
5233                 AC_MSG_NOTICE(Using IRIX ACLs)
5234                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5235                 default_static_modules="$default_static_modules vfs_irixacl"
5236                 ;;
5237         *aix*)
5238                 AC_MSG_NOTICE(Using AIX ACLs)
5239                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5240                 default_static_modules="$default_static_modules vfs_aixacl"
5241                 ;;
5242         *osf*)
5243                 AC_MSG_NOTICE(Using Tru64 ACLs)
5244                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5245                 ACL_LIBS="$ACL_LIBS -lpacl"
5246                 default_static_modules="$default_static_modules vfs_tru64acl"
5247                 ;;
5248         *darwin*)
5249                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5250                 ;;
5251         *)
5252                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5253                 case "$host_os" in
5254                 *linux*)
5255                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5256                         ;;
5257                 esac
5258                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5259                         acl_LIBS=$LIBS
5260                         LIBS="$LIBS $ACL_LIBS"
5261                         AC_TRY_LINK([
5262                                 #include <sys/types.h>
5263                                 #include <sys/acl.h>
5264                         ],[
5265                                 acl_t acl;
5266                                 int entry_id;
5267                                 acl_entry_t *entry_p;
5268                                 return acl_get_entry(acl, entry_id, entry_p);
5269                         ],
5270                         [samba_cv_HAVE_POSIX_ACLS=yes],
5271                         [samba_cv_HAVE_POSIX_ACLS=no])
5272                         LIBS=$acl_LIBS
5273                 ])
5274                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5275                         AC_MSG_NOTICE(Using posix ACLs)
5276                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5277                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5278                                 acl_LIBS=$LIBS
5279                                 LIBS="$LIBS $ACL_LIBS"
5280                                 AC_TRY_LINK([
5281                                         #include <sys/types.h>
5282                                         #include <sys/acl.h>
5283                                 ],[
5284                                         acl_permset_t permset_d;
5285                                         acl_perm_t perm;
5286                                         return acl_get_perm_np(permset_d, perm);
5287                                 ],
5288                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5289                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5290                                 LIBS=$acl_LIBS
5291                         ])
5292                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5293                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5294                         fi
5295                         default_static_modules="$default_static_modules vfs_posixacl"
5296                 else
5297                         AC_MSG_NOTICE(ACL support is not avaliable)
5298                 fi
5299                 ;;
5300         esac
5301 fi # with_acl_support
5303 #################################################
5304 # check if we have FreeBSD sunacl
5305 case "$host_os" in
5306 *freebsd*)
5307     AC_CHECK_HEADER(sunacl.h)
5308     if test x"$ac_cv_header_sunacl_h" = xyes ; then
5309        AC_DEFINE(HAVE_FREEBSD_SUNACL_H,1,[Whether we have FreeBSD sunacl around])
5310        ZFSACL_LIBS=-lsunacl
5311        AC_SUBST(ZFSACL_LIBS)
5312        default_shared_modules="$default_shared_modules vfs_zfsacl"
5313     fi
5314     ;;
5315 esac
5317 #################################################
5318 # check for AIO support
5320 with_aio=auto
5321 AC_MSG_CHECKING(whether to support asynchronous io)
5322 AC_ARG_WITH(aio-support,
5323 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=auto)])],
5324 [  case "$withval" in
5325     yes|no)
5326         with_aio=$withval
5327         ;;
5328    esac ])
5330 AC_MSG_RESULT($with_aio)
5332 if test x"$with_aio" = x"no"; then
5333     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5334 else
5335                 AIO_LIBS=$LIBS
5336                 no_rt_LIBS=$LIBS
5337                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5338                 LIBS=$no_rt_LIBS
5339                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5340                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5341                 aio_LIBS=$LIBS
5342                 LIBS=$AIO_LIBS
5343                 AC_TRY_LINK([#include <sys/types.h>
5344 #include <aio.h>],
5345 [ struct aiocb a; return aio_read(&a);],
5346 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5347                 LIBS=$aio_LIBS])
5348                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5349                         AC_DEFINE(HAVE_AIO, 1, [Using asynchronous io])
5350                         LIBS=$AIO_LIBS
5351                         AC_MSG_CHECKING(for aio_read)
5352                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5353 int main() { struct aiocb a; return aio_read(&a); }])],
5354 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5355 [AC_MSG_RESULT(no)])
5357                         AC_MSG_CHECKING(for aio_write)
5358                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5359 int main() { struct aiocb a; return aio_write(&a); }])],
5360 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5361 [AC_MSG_RESULT(no)])
5363                         AC_MSG_CHECKING(for aio_fsync)
5364                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5365 int main() { struct aiocb a; return aio_fsync(1, &a); }])],
5366 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5367 [AC_MSG_RESULT(no)])
5369                         AC_MSG_CHECKING(for aio_return)
5370                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5371 int main() { struct aiocb a; return aio_return(&a); }])],
5372 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5373 [AC_MSG_RESULT(no)])
5375                         AC_MSG_CHECKING(for aio_error)
5376                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5377 int main() { struct aiocb a; return aio_error(&a); }])],
5378 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5379 [AC_MSG_RESULT(no)])
5381                         AC_MSG_CHECKING(for aio_cancel)
5382                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5383 int main() { struct aiocb a; return aio_cancel(1, &a); }])],
5384 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5385 [AC_MSG_RESULT(no)])
5387                         AC_MSG_CHECKING(for aio_suspend)
5388                         AC_LINK_IFELSE([AC_LANG_SOURCE([#include <aio.h>
5389 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }])],
5390 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5391 [AC_MSG_RESULT(no)])
5392                 else
5393                         AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5394                         AC_MSG_RESULT(no)
5395                 fi
5398 if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5399         x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5400         default_shared_modules="$default_shared_modules vfs_aio_fork"
5403 # Check for Linux kernel aio support.
5404 case "$host_os" in
5405 *linux*)
5406     AC_CHECK_LIB(aio,io_submit,[AIO_LIBS="$LIBS -laio"])
5407     AC_CACHE_CHECK([for Linux kernel asynchronous io support],samba_cv_HAVE_LINUX_KERNEL_AIO,[
5408     aio_LIBS=$LIBS
5409     LIBS=$AIO_LIBS
5410     AC_TRY_LINK([#include <unistd.h>
5411 #include <stdlib.h>
5412 #include <sys/types.h>
5413 #include <fcntl.h>
5414 #include <sys/eventfd.h>
5415 #include <libaio.h>],
5416 [ struct io_event ioev;
5417 struct iocb *ioc;
5418 io_context_t ctx;
5419 struct timespec ts;
5420 int fd;
5421 char *buf;
5422 fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
5423 io_queue_init(128,&ctx);
5424 io_prep_pwrite(ioc, 1, buf, 1, 0);
5425 io_prep_pread(ioc, 1, buf, 1, 0);
5426 io_set_eventfd(ioc, fd);
5427 io_set_callback(ioc, (io_callback_t)(0));
5428 io_submit(ctx, 1, &ioc);
5429 io_getevents(ctx, 1, 1, &ioev, &ts);],
5430 samba_cv_HAVE_LINUX_KERNEL_AIO=yes,samba_cv_HAVE_LINUX_KERNEL_AIO=no)
5431                 LIBS=$aio_LIBS])
5432     if test x"$samba_cv_HAVE_LINUX_KERNEL_AIO" = x"yes"; then
5433         default_shared_modules="$default_shared_modules vfs_aio_linux"
5434     fi
5435     ;;
5436 esac
5438 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5439   default_shared_modules="$default_shared_modules vfs_aio_posix"
5442 #################################################
5443 # check for sendfile support
5445 AC_MSG_CHECKING(whether sendfile support should be built in)
5446 AC_ARG_WITH(sendfile-support,
5447 [AS_HELP_STRING([--with-sendfile-support], [Whether sendfile support should be built in (default=auto)])],
5448 [ case "$withval" in
5449   yes|no)
5450         AC_MSG_RESULT($withval);
5451         with_sendfile_support=$withval
5452         ;;
5453   *)
5454         AC_MSG_RESULT(yes)
5455         with_sendfile_support=auto
5456         ;;
5457   esac ],
5460 if test x$with_sendfile_support != xno ; then
5461     case "$host_os" in
5462         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5463                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5464                 AC_TRY_LINK([#include <sys/sendfile.h>],
5466 int tofd, fromfd;
5467 off_t offset;
5468 size_t total;
5469 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5471 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5473         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5474                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5475                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5476                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5477         else
5478                 AC_MSG_RESULT(no);
5479         fi
5481         ;;
5482         *freebsd* | *dragonfly* )
5483                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5484                 AC_TRY_LINK([\
5485 #include <sys/types.h>
5486 #include <unistd.h>
5487 #include <sys/socket.h>
5488 #include <sys/uio.h>],
5490         int fromfd, tofd, ret, total=0;
5491         off_t offset, nwritten;
5492         struct sf_hdtr hdr;
5493         struct iovec hdtrl;
5494         hdr.headers = &hdtrl;
5495         hdr.hdr_cnt = 1;
5496         hdr.trailers = NULL;
5497         hdr.trl_cnt = 0;
5498         hdtrl.iov_base = NULL;
5499         hdtrl.iov_len = 0;
5500         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5502 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5504         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5505                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5506                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5507                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5508         else
5509                 AC_MSG_RESULT(no);
5510         fi
5511         ;;
5512         *darwin*)
5513                 AC_CACHE_CHECK([for Darwin sendfile support],
5514                         samba_cv_HAVE_SENDFILE,
5515                         [
5516                         AC_TRY_LINK([
5517 #include <sys/types.h>
5518 #include <sys/socket.h>
5519 #include <sys/uio.h>
5520                         ],
5521                         [
5522         int fromfd, tofd, ret;
5523         off_t offset, nwritten;
5524         struct sf_hdtr hdr;
5525         struct iovec hdtrl;
5526         hdr.headers = &hdtrl;
5527         hdr.hdr_cnt = 1;
5528         hdr.trailers = (void *)0;
5529         hdr.trl_cnt = 0;
5530         hdtrl.iov_base = (void *)0;
5531         hdtrl.iov_len = 0;
5532         ret = sendfile(fromfd, tofd, offset, &nwritten, &hdr, 0);
5533                         ],
5534                         samba_cv_HAVE_SENDFILE=yes,
5535                         samba_cv_HAVE_SENDFILE=no)])
5537         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5538                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5539                 AC_DEFINE(DARWIN_SENDFILE_API,1,[Whether the Darwin sendfile() API is available])
5540                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5541         else
5542                 AC_MSG_RESULT(no);
5543         fi
5544         ;;
5545         *hpux*|*osf*)
5546                 AC_CACHE_CHECK([for osf/hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5547                 AC_TRY_LINK([\
5548 #include <sys/socket.h>
5549 #include <sys/uio.h>],
5551         int fromfd, tofd;
5552         size_t total=0;
5553         struct iovec hdtrl[2];
5554         ssize_t nwritten;
5555         off_t offset;
5557         hdtrl[0].iov_base = 0;
5558         hdtrl[0].iov_len = 0;
5560         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5562 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5563         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5564                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5565                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the osf/hpux sendfile() API is available])
5566                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5567         else
5568                 AC_MSG_RESULT(no);
5569         fi
5570         ;;
5572         *solaris*)
5573                 AC_CHECK_LIB(sendfile,sendfilev)
5574                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5575                 AC_TRY_LINK([\
5576 #include <sys/sendfile.h>],
5578         int sfvcnt;
5579         size_t xferred;
5580         struct sendfilevec vec[2];
5581         ssize_t nwritten;
5582         int tofd;
5584         sfvcnt = 2;
5586         vec[0].sfv_fd = SFV_FD_SELF;
5587         vec[0].sfv_flag = 0;
5588         vec[0].sfv_off = 0;
5589         vec[0].sfv_len = 0;
5591         vec[1].sfv_fd = 0;
5592         vec[1].sfv_flag = 0;
5593         vec[1].sfv_off = 0;
5594         vec[1].sfv_len = 0;
5595         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5597 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5599         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5600                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5601                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5602                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5603         else
5604                 AC_MSG_RESULT(no);
5605         fi
5606         ;;
5607         *aix*)
5608                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5609                 AC_TRY_LINK([\
5610 #include <sys/socket.h>],
5612         int fromfd, tofd;
5613         size_t total=0;
5614         struct sf_parms hdtrl;
5615         ssize_t nwritten;
5617         hdtrl.header_data = 0;
5618         hdtrl.header_length = 0;
5619         hdtrl.file_descriptor = fromfd;
5620         hdtrl.file_offset = 0;
5621         hdtrl.file_bytes = 0;
5622         hdtrl.trailer_data = 0;
5623         hdtrl.trailer_length = 0;
5625         nwritten = send_file(&tofd, &hdtrl, 0);
5627 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5628         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5629                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5630                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5631                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5632         else
5633                 AC_MSG_RESULT(no);
5634         fi
5635         ;;
5636         *)
5637         ;;
5638     esac
5641 if test x$with_sendfile_support = xyes -a x"$samba_cv_HAVE_SENDFILE" != xyes ; then
5642         AC_MSG_ERROR(sendfile support requested but sendfile not available )
5645 ############################################
5646 # See if we have the Linux readahead syscall.
5648 AC_CACHE_CHECK([for Linux readahead],
5649                 samba_cv_HAVE_LINUX_READAHEAD,[
5650     AC_TRY_LINK([
5651 #if defined(HAVE_UNISTD_H)
5652 #include <unistd.h>
5653 #endif
5654 #include <fcntl.h>],
5655     [ssize_t err = readahead(0,0,0x80000);],
5656     samba_cv_HAVE_LINUX_READAHEAD=yes,
5657     samba_cv_HAVE_LINUX_READAHEAD=no)])
5659 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5660   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5661              [Whether Linux readahead is available])
5664 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
5666 ############################################
5667 # See if we have the posix_fadvise syscall.
5669 AC_CACHE_CHECK([for posix_fadvise],
5670                 samba_cv_HAVE_POSIX_FADVISE,[
5671     AC_TRY_LINK([
5672 #if defined(HAVE_UNISTD_H)
5673 #include <unistd.h>
5674 #endif
5675 #include <fcntl.h>],
5676     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5677     samba_cv_HAVE_POSIX_FADVISE=yes,
5678     samba_cv_HAVE_POSIX_FADVISE=no)])
5680 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5681   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5682              [Whether posix_fadvise is available])
5685 ############################################
5686 # See if we have the openat syscall.
5688 AC_CACHE_CHECK([for openat],
5689                 samba_cv_HAVE_OPENAT,[
5690     AC_TRY_LINK([
5691 #if defined(HAVE_UNISTD_H)
5692 #include <unistd.h>
5693 #endif
5694 #include <fcntl.h>],
5695     [int fd = openat(AT_FDCWD, ".", O_RDONLY);],
5696     samba_cv_HAVE_OPENAT=yes,
5697     samba_cv_HAVE_OPENAT=no)])
5699 if test x"$samba_cv_HAVE_OPENAT" = x"yes"; then
5700     AC_DEFINE(HAVE_OPENAT,1, [Whether openat is available])
5703 ############################################
5704 # See if we have the Linux splice syscall.
5706 case "$host_os" in
5707 *linux*)
5708 AC_CACHE_CHECK([for Linux splice],
5709                 samba_cv_HAVE_LINUX_SPLICE,[
5710     AC_TRY_LINK([
5711 #if defined(HAVE_UNISTD_H)
5712 #include <unistd.h>
5713 #endif
5714 #include <fcntl.h>],
5715     [long ret = splice(0,0,1,0,400,SPLICE_F_MOVE);],
5716     samba_cv_HAVE_LINUX_SPLICE=yes,
5717     samba_cv_HAVE_LINUX_SPLICE=no)])
5720 samba_cv_HAVE_LINUX_SPLICE=no
5722 esac
5724 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
5725   AC_DEFINE(HAVE_LINUX_SPLICE,1,
5726              [Whether Linux splice is available])
5729 AC_HAVE_DECL(splice, [#include <fcntl.h>])
5731 ############################################
5732 # See if we have the a broken readlink syscall.
5734 AC_CACHE_CHECK([for a broken readlink syscall],samba_cv_HAVE_BROKEN_READLINK,[
5735 AC_TRY_RUN([#include "${srcdir-.}/../tests/readlink.c"],
5736         samba_cv_HAVE_BROKEN_READLINK=no,samba_cv_HAVE_BROKEN_READLINK=yes,samba_cv_HAVE_BROKEN_READLINK=cross)
5738 if test x"$samba_cv_HAVE_BROKEN_READLINK" = x"yes"; then
5739         AC_DEFINE(HAVE_BROKEN_READLINK,1,[Whether the readlink syscall is broken])
5742 #################################################
5743 # Check whether winbind is supported on this platform.  If so we need to
5744 # build and install client programs, sbin programs and shared libraries
5746 AC_MSG_CHECKING(whether to build winbind)
5748 # Initially, the value of $host_os decides whether winbind is supported
5750 HAVE_WINBIND=yes
5751 HAVE_WBCLIENT=no
5753 # Define external wbclient library to link against.  This disables winbind.
5754 # We define this here so --with-winbind can override it.
5755 AC_ARG_WITH(wbclient,
5756 [AS_HELP_STRING([--with-wbclient], [Use external wbclient (optional)])],
5758   case "$withval" in
5759         no)
5760                 HAVE_WBCLIENT=no
5761                 ;;
5762         yes)
5763                 HAVE_WBCLIENT=yes
5764                 HAVE_WINBIND=no
5765                 ;;
5766         *)
5767                 HAVE_WBCLIENT=yes
5768                 HAVE_WINBIND=no
5769                 WBCLIENT_INCLUDES="-I$withval/include"
5770                 WBCLIENT_LDFLAGS="-L$withval/lib"
5771                 ;;
5772   esac ],
5775 AC_SUBST(WBCLIENT_INCLUDES)
5776 AC_SUBST(WBCLIENT_LDFLAGS)
5777 AC_SUBST(WBCLIENT_LIBS)
5780 # Define the winbind shared library name and any specific linker flags
5781 # it needs to be built with.
5783 WINBIND_NSS="../nsswitch/libnss_winbind.$SHLIBEXT"
5784 WINBIND_WINS_NSS="../nsswitch/libnss_wins.$SHLIBEXT"
5785 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5786 NSSSONAMEVERSIONSUFFIX=""
5788 case "$host_os" in
5789         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5790                 NSSSONAMEVERSIONSUFFIX=".2"
5791                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_linux.o"
5792                 ;;
5793         *freebsd[[5-9]]* | *freebsd1[[0-9]]*)
5794                 # FreeBSD winbind client is implemented as a wrapper around
5795                 # the Linux version.
5796                 NSSSONAMEVERSIONSUFFIX=".1"
5797                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_freebsd.o \
5798                     ../nsswitch/winbind_nss_linux.o"
5799                 WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
5800                 WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
5801                 ;;
5803         *netbsd*[[3-9]]* | *netbsd1[[0-9]]*)
5804                 # NetBSD winbind client is implemented as a wrapper
5805                 # around the Linux version. It needs getpwent_r() to
5806                 # indicate libc's use of the correct nsdispatch API.
5807                 #
5808                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5809                         WINBIND_NSS_EXTRA_OBJS="\
5810                             ../nsswitch/winbind_nss_netbsd.o \
5811                             ../nsswitch/winbind_nss_linux.o"
5812                         WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
5813                         WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
5814                 else
5815                         HAVE_WINBIND=no
5816                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5817                 fi
5818                 ;;
5819         *irix*)
5820                 # IRIX has differently named shared libraries
5821                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_irix.o"
5822                 WINBIND_NSS="../nsswitch/libns_winbind.$SHLIBEXT"
5823                 WINBIND_WINS_NSS="../nsswitch/libns_wins.$SHLIBEXT"
5824                 ;;
5825         *solaris*)
5826                 # Solaris winbind client is implemented as a wrapper around
5827                 # the Linux version.
5828                 NSSSONAMEVERSIONSUFFIX=".1"
5829                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o \
5830                     ../nsswitch/winbind_nss_linux.o"
5831                 ;;
5832         *hpux11*)
5833                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o"
5834                 ;;
5835         *aix*)
5836                 # AIX has even differently named shared libraries.  No
5837                 # WINS support has been implemented yet.
5838                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_aix.o"
5839                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5840                 WINBIND_NSS="../nsswitch/WINBIND"
5841                 WINBIND_WINS_NSS=""
5842                 ;;
5843         *darwin*)
5844                 ;;
5845         *)
5846                 HAVE_WINBIND=no
5847                 winbind_no_reason=", unsupported on $host_os"
5848                 ;;
5849 esac
5851 # Check the setting of --with-winbind
5853 AC_ARG_WITH(winbind,
5854 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
5856   case "$withval" in
5857         yes)
5858                 HAVE_WINBIND=yes
5859                 HAVE_WBCLIENT=no
5860                 ;;
5861         no)
5862                 HAVE_WINBIND=no
5863                 winbind_reason=""
5864                 ;;
5865   esac ],
5868 # We need unix domain sockets for winbind
5870 if test x"$HAVE_WINBIND" = x"yes"; then
5871         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
5872                 winbind_no_reason=", no unix domain socket support on $host_os"
5873                 HAVE_WINBIND=no
5874         fi
5877 # Display test results
5879 if test x"$HAVE_WINBIND" = x"no"; then
5880         WINBIND_NSS=""
5881         WINBIND_WINS_NSS=""
5883 if test x"$HAVE_WBCLIENT" = x"yes"; then
5884         AC_CHECK_LIB(wbclient, wbcInterfaceDetails,
5885                      [LIBWBCLIENT_LIBS="-lwbclient"], AC_MSG_ERROR([Could not find wbclient]), [$WBCLIENT_LDFLAGS])
5886         LIBWBCLIENT_LIBS="$LIBWBCLIENT_LIBS $WBCLIENT_LDFLAGS"
5887         AC_MSG_RESULT(yes)
5888         AC_DEFINE(WITH_WINBIND,1,[Whether to link to wbclient])
5889         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo"
5890 else
5891         if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
5892                 BUILD_LIBWBCLIENT_SHARED=no
5893         else
5894                 BUILD_LIBWBCLIENT_SHARED=yes
5895         fi
5897         LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
5898         LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
5899         LIBWBCLIENT_SOVER=0
5900         LIBWBCLIENT_FULLVER=0
5901         LIBWBCLIENT_SHARED_TARGET_SOVER=$LIBWBCLIENT_SHARED_TARGET.$LIBWBCLIENT_SOVER
5902         LIBWBCLIENT_SHARED_TARGET_FULLVER=$LIBWBCLIENT_SHARED_TARGET.$LIBWBCLIENT_FULLVER
5903         if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
5904                 NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
5905                 ## Only worry about libwbclient if we have shared
5906                 # library support
5907                 LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
5908                 LIBWBCLIENT=libwbclient
5909                 INSTALL_LIBWBCLIENT=installlibwbclient
5910                 UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
5911                 LIBWBCLIENT_LIBS="-lwbclient"
5912         else
5913                 LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
5914                 LIBWBCLIENT_LIBS=$LIBWBCLIENT_STATIC_TARGET
5915         fi
5918 if test x"$HAVE_WINBIND" = x"yes"; then
5919         AC_MSG_RESULT(yes)
5920         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
5922         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo"
5923         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd"
5924         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
5925                 PAM_MODULES="$PAM_MODULES pam_winbind"
5926                 INSTALL_PAM_MODULES="installpammodules"
5927                 UNINSTALL_PAM_MODULES="uninstallpammodules"
5928         fi
5930         # we use winbind, check for krb5 locate_plugin support:
5931         AC_CHECK_HEADERS([krb5/locate_plugin.h], [], [],
5932                 [[#ifdef HAVE_KRB5_H
5933                  #include <krb5.h>
5934                  #endif
5935         ]])
5936         if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
5937                 WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
5938                 if test x"$BLDSHARED" = x"true" ; then
5939                         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
5940                 fi
5941         fi
5942         # end of krb5 locate_plugin check
5943 else
5944         AC_MSG_RESULT(no$winbind_no_reason)
5947 AC_SUBST(WINBIND_NSS)
5948 AC_SUBST(WINBIND_WINS_NSS)
5949 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
5950 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
5951 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
5953 AC_SUBST(WINBIND_KRB5_LOCATOR)
5955 # Solaris 10 does have new member in nss_XbyY_key
5956 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
5957                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
5958                 [#include <nss_dbdefs.h>])
5960 # Solaris has some extra fields in struct passwd that need to be
5961 # initialised otherwise nscd crashes.
5963 AC_CHECK_MEMBER(struct passwd.pw_comment,
5964                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
5965                 [#include <pwd.h>])
5967 AC_CHECK_MEMBER(struct passwd.pw_age,
5968                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
5969                 [#include <pwd.h>])
5971 # AIX 4.3.x and 5.1 do not have as many members in
5972 # struct secmethod_table as AIX 5.2
5973 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
5974        [#include <usersec.h>])
5975 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
5976        [#include <usersec.h>])
5978 #################################################
5979 # Check to see if we should use the included popt
5981 AC_ARG_WITH(included-popt,
5982 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
5984   case "$withval" in
5985         yes)
5986                 INCLUDED_POPT=yes
5987                 ;;
5988         no)
5989                 INCLUDED_POPT=no
5990                 ;;
5991   esac ],
5993 if test x"$INCLUDED_POPT" != x"yes"; then
5994     AC_CHECK_LIB(popt, poptGetContext,
5995                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
5998 AC_MSG_CHECKING(whether to use included popt)
5999 if test x"$INCLUDED_POPT" = x"yes"; then
6000     AC_MSG_RESULT(yes)
6001     BUILD_POPT='$(POPT_OBJ)'
6002     POPTLIBS='$(POPT_OBJ)'
6003     FLAGS1="-I\$(srcdir)/../lib/popt"
6004 else
6005     AC_MSG_RESULT(no)
6006         BUILD_POPT=""
6007     POPTLIBS="-lpopt"
6009 AC_SUBST(BUILD_POPT)
6010 AC_SUBST(POPTLIBS)
6011 AC_SUBST(FLAGS1)
6013 #################################################
6014 # Check if user wants DNS service discovery support
6016 AC_ARG_ENABLE(dnssd,
6017 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=no)])])
6019 AC_SUBST(DNSSD_LIBS)
6020 if test x"$enable_dnssd" = x"yes"; then
6021     have_dnssd_support=yes
6023     AC_CHECK_HEADERS(dns_sd.h)
6024     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6025         have_dnssd_support=no
6026     fi
6028     # On Darwin the DNSSD API is in libc, but on other platforms it's
6029     # probably in -ldns_sd
6030     AC_CHECK_FUNCS(DNSServiceRegister)
6031     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6032     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6033             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6034         have_dnssd_support=no
6035     fi
6037     if test x"$have_dnssd_support" = x"yes"; then
6038         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6039                 [Whether to enable DNS service discovery support])
6040     else
6041         if test x"$enable_dnssd" = x"yes"; then
6042             AC_MSG_ERROR(DNS service discovery support not available)
6043         fi
6044     fi
6048 #################################################
6049 # Check if user wants avahi support
6051 AC_ARG_ENABLE(avahi,
6052 [AS_HELP_STRING([--enable-avahi], [Enable Avahi support (default=auto)])])
6054 if test x"$enable_avahi" != x"no"; then
6055     have_avahi_support=yes
6057     AC_CHECK_HEADERS(avahi-common/watch.h)
6058     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6059         have_avahi_support=no
6060     fi
6062     AC_CHECK_HEADERS(avahi-client/client.h)
6063     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6064         have_avahi_support=no
6065     fi
6067     save_LIBS="$LIBS"
6068     AC_CHECK_LIB(avahi-client, avahi_client_new,[have_avahi_client_new=yes])
6069     AC_CHECK_LIB(avahi-common, avahi_strerror,[have_avahi_strerror=yes])
6070     LIBS="$save_LIBS"
6072     if test x"$have_avahi_client_new" != x"yes" -o \
6073        x"$have_avahi_strerror" != x"yes" ; then
6074         have_avahi_support=no
6075     fi
6077     if test x"$have_avahi_support" = x"yes"; then
6078         AC_SUBST(AVAHI_LIBS, "-lavahi-client -lavahi-common")
6079         AC_DEFINE(WITH_AVAHI_SUPPORT, 1,
6080                 [Whether to enable avahi support])
6081         AC_SUBST(AVAHI_OBJ, "lib/avahi.o smbd/avahi_register.o")
6082     else
6083         if test x"$enable_avahi" = x"yes"; then
6084             AC_MSG_ERROR(avahi support not available)
6085         fi
6086     fi
6090 #################################################
6091 # Set pthread stuff
6093 PTHREAD_CFLAGS=error
6094 PTHREAD_LDFLAGS=error
6096 # If it's error, then the user didn't 
6097 # define it.
6098 if test "x$PTHREAD_LDFLAGS" = xerror; then
6099   AC_CHECK_LIB(pthread, pthread_attr_init, [
6100              PTHREAD_CFLAGS="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
6101              PTHREAD_LDFLAGS="-lpthread" ])
6104 if test "x$PTHREAD_LDFLAGS" = xerror; then
6105   AC_CHECK_LIB(pthreads, pthread_attr_init, [
6106              PTHREAD_CFLAGS="-D_THREAD_SAFE"
6107              PTHREAD_LDFLAGS="-lpthreads" ])
6110 if test "x$PTHREAD_LDFLAGS" = xerror; then
6111    AC_CHECK_LIB(c_r, pthread_attr_init, [
6112                 PTHREAD_CFLAGS="-D_THREAD_SAFE -pthread"
6113                 PTHREAD_LDFLAGS="-pthread" ])
6116 if test "x$PTHREAD_LDFLAGS" = xerror; then
6117    AC_CHECK_FUNC(pthread_attr_init, [
6118                  PTHREAD_CFLAGS="-D_REENTRANT"
6119                  PTHREAD_LDFLAGS="-lpthread" ])
6122 # especially for HP-UX, where the AC_CHECK_FUNC macro fails to test for
6123 # pthread_attr_init. On pthread_mutex_lock it works there...
6124 if test "x$PTHREAD_LDFLAGS" = xerror; then
6125    AC_CHECK_LIB(pthread, pthread_mutex_lock, [
6126                 PTHREAD_CFLAGS="-D_REENTRANT"
6127                 PTHREAD_LDFLAGS="-lpthread" ])
6130 AC_SUBST(PTHREAD_CFLAGS)
6131 AC_SUBST(PTHREAD_LDFLAGS)
6133 samba_cv_HAVE_PTHREAD=no
6134 if test x"$PTHREAD_CFLAGS" != xerror -a x"$PTHREAD_LDFLAGS" != xerror; then
6135         samba_cv_HAVE_PTHREAD=yes
6136         # now check for pthread.h with pthread-correct CFLAGS and LDFLAGS:
6137         ac_save_CFLAGS=$CFLAGS
6138         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6139         ac_save_LDFLAGS=$LDFLAGS
6140         LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
6141         AC_CHECK_HEADERS(pthread.h)
6142         CFLAGS=$ac_save_CFLAGS
6143         LDFLAGS=$ac_save_LDFLAGS
6144         AC_DEFINE(HAVE_PTHREAD, 1, [Do we have pthreads around?])
6147 #################################################
6148 # Check if user wants pthreadpool support
6150 AC_ARG_ENABLE(pthreadpool,
6151 [AS_HELP_STRING([--enable-pthreadpool], [Enable pthreads pool helper support (default=yes)])])
6153 if test x"$enable_pthreadpool" = xyes -a x"$samba_cv_HAVE_PTHREAD" != x"yes"; then
6154         AC_MSG_ERROR([pthreadpool support cannot be enabled when pthread support was not found])
6157 if test x"$enable_pthreadpool" != x"no" -a x"$samba_cv_HAVE_PTHREAD" = x"yes"; then
6158     LIBS="$LIBS $PTHREAD_LDFLAGS"
6159     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6160     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool/pthreadpool.o")
6161     default_shared_modules="$default_shared_modules vfs_aio_pthread"
6162 else
6163     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool/pthreadpool_sync.o")
6166 PTHREADPOOLTEST="bin/pthreadpooltest"
6167 AC_SUBST(PTHREADPOOLTEST)
6170 #################################################
6171 # Check to see if we should use the included iniparser
6173 AC_ARG_WITH(included-iniparser,
6174 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6176   case "$withval" in
6177         yes)
6178                 INCLUDED_INIPARSER=yes
6179                 ;;
6180         no)
6181                 INCLUDED_INIPARSER=no
6182                 ;;
6183   esac ],
6185 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6186     AC_CHECK_LIB(iniparser, iniparser_load,
6187                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6190 AC_MSG_CHECKING(whether to use included iniparser)
6191 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6192     AC_MSG_RESULT(yes)
6193     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6194         INIPARSERLIBS=""
6195     FLAGS1="$FLAGS1 -I\$(srcdir)/../lib/iniparser/src"
6196 else
6197     AC_MSG_RESULT(no)
6198         BUILD_INIPARSER=""
6199     INIPARSERLIBS="-liniparser"
6201 AC_SUBST(BUILD_INIPARSER)
6202 AC_SUBST(INIPARSERLIBS)
6203 AC_SUBST(FLAGS1)
6205 AC_ARG_ENABLE(fault-handler,[AS_HELP_STRING([--disable-fault-handler], [Disable the default handler])])
6207 if test x"$enable_fault_handler" = x"no"; then
6208         AC_DEFINE(HAVE_DISABLE_FAULT_HANDLER, 1, [Disable the default signal handler])
6211 ###################################################
6212 # Check for different/missing (set|get|end)netgrent prototypes
6213 CFLAGS_SAVE=$CFLAGS
6214 if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
6215         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6217 AC_CACHE_CHECK([for setnetgrent prototype],samba_cv_setnetgrent_prototype, [
6218     AC_TRY_COMPILE([#include<netdb.h>
6219                     #ifdef HAVE_NETGROUP_H
6220                     #include<netgroup.h>
6221                     #endif],[setnetgrent("foo")],
6222                     samba_cv_setnetgrent_prototype=yes, samba_cv_setnetgrent_prototype=no)])
6223 if test x"$samba_cv_setnetgrent_prototype" = x"yes"; then
6224     AC_DEFINE(HAVE_SETNETGRENT_PROTOTYPE, 1, [If setnetgrent prototype is defined])
6226 AC_CACHE_CHECK([for getnetgrent prototype],samba_cv_getnetgrent_prototype, [
6227     AC_TRY_COMPILE([#include<netdb.h>
6228                     #ifdef HAVE_NETGROUP_H
6229                     #include<netgroup.h>
6230                     #endif],[char *dom, *user,*host; getnetgrent(&dom,&user,&host)],
6231                     samba_cv_getnetgrent_prototype=yes, samba_cv_getnetgrent_prototype=no)])
6232 if test x"$samba_cv_getnetgrent_prototype" = x"yes"; then
6233     AC_DEFINE(HAVE_GETNETGRENT_PROTOTYPE, 1, [If getnetgrent prototype is defined])
6235 AC_CACHE_CHECK([for endnetgrent prototype],samba_cv_endnetgrent_prototype, [
6236     AC_TRY_COMPILE([#include<netdb.h>
6237                     #ifdef HAVE_NETGROUP_H
6238                     #include<netgroup.h>
6239                     #endif],[endnetgrent()],
6240                     samba_cv_endnetgrent_prototype=yes, samba_cv_endnetgrent_prototype=no)])
6241 if test x"$samba_cv_endnetgrent_prototype" = x"yes"; then
6242     AC_DEFINE(HAVE_ENDNETGRENT_PROTOTYPE, 1, [If endnetgrent prototype is defined])
6245 CFLAGS=$CFLAGS_SAVE
6247 # Checks for POSIX ignorant BSD style statvfs() function
6248 # Start
6249 AC_CHECK_HEADERS(sys/param.h sys/mount.h)
6251 AC_MSG_CHECKING([checking for posix ignorant *bsd style statfs struct])
6252 AC_CACHE_VAL(bsdstatvfs_cv_statfs,[
6253              AC_TRY_RUN([
6254                 #ifdef HAVE_SYS_PARAM_H
6255                 #include <sys/param.h>
6256                 #endif
6257                 #ifdef HAVE_SYS_MOUNT_H
6258                 #include <sys/mount.h>
6259                 #endif
6260                 int main (void)
6261                 {
6262                         struct statfs fsd;
6263                         fsd.f_bsize = 0;
6264                         fsd.f_iosize = 0;
6265                         return (statfs (".", &fsd));
6266                 }],
6267                 bsdstatvfs_cv_statfs=yes,
6268                 bsdstatvfs_cv_statfs=no,
6269                 bsdstatvfs_cv_statfs=no)])
6270 AC_MSG_RESULT($bsdstatvfs_cv_statfs)
6272 if test $bsdstatvfs_cv_statfs = yes; then
6273   AC_DEFINE(BSD_STYLE_STATVFS,1,[Whether statfs struct is *bsd style])
6275 # End of checks POSIX ignorant BSD style statvfs() function
6277 # Checks for the vfs_fileid module
6278 # Start
6279 AC_CHECK_FUNC(getmntent)
6281 AC_CHECK_HEADERS(sys/statfs.h)
6283 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid])
6284 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6285              AC_TRY_RUN([
6286                 #include <sys/types.h>
6287                 #include <sys/statfs.h>
6288                 int main(void)
6289                 {
6290                         struct statfs fsd;
6291                         fsid_t fsid = fsd.f_fsid;
6292                         return statfs (".", &fsd);
6293                 }],
6294                 vfsfileid_cv_statfs=yes,
6295                 vfsfileid_cv_statfs=no,
6296                 vfsfileid_cv_statfs=cross)
6298 AC_MSG_RESULT($vfsfileid_cv_statfs)
6300 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6301         x"$vfsfileid_cv_statfs" = x"yes"; then
6302         default_shared_modules="$default_shared_modules vfs_fileid"
6304 # End
6305 # Checks for the vfs_fileid module
6308 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6310         eval MODULE_DEFAULT_$i=STATIC
6311 done
6313 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6315         dnl Fall back to static if we cannot build shared libraries
6316         eval MODULE_DEFAULT_$i=STATIC
6318         if test $BLDSHARED = true; then
6319                 eval MODULE_DEFAULT_$i=SHARED
6320         fi
6321 done
6323 dnl Always build these modules static
6324 MODULE_rpc_spoolss=STATIC
6325 MODULE_rpc_srvsvc=STATIC
6326 MODULE_idmap_tdb=STATIC
6327 MODULE_idmap_passdb=STATIC
6328 MODULE_idmap_nss=STATIC
6330 MODULE_nss_info_template=STATIC
6332 AC_ARG_WITH(static-modules,
6333 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6334 [ if test $withval; then
6335         for i in `echo $withval | sed -e 's/,/ /g'`
6336         do
6337                 eval MODULE_$i=STATIC
6338         done
6339 fi ])
6341 AC_ARG_WITH(shared-modules,
6342 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6343 [ if test $withval; then
6344         for i in `echo $withval | sed -e 's/,/ /g'`
6345         do
6346                         eval MODULE_$i=SHARED
6347         done
6348 fi ])
6350 if test x"$MODULE_DEFAULT_vfs_notify_fam" = xSTATIC -o \
6351                 x"$MODULE_vfs_notify_fam" = xSTATIC ; then
6352         SMBD_FAM_LIBS="$SMB_FAM_LIBS"
6353         AC_SUBST(SMBD_FAM_LIBS)
6356 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o passdb/pdb_ipa.o passdb/pdb_ldap_util.o,
6357                    "bin/ldapsam.$SHLIBEXT", PDB,
6358                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6359 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6360 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6361 SMB_MODULE(pdb_wbc_sam, passdb/pdb_wbc_sam.o, "bin/wbc_sam.$SHLIBEXT", PDB)
6362 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6364 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6365 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6366 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6367 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6368 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6369 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6370 SMB_MODULE(idmap_autorid, winbindd/idmap_autorid.o, "bin/autorid.$SHLIBEXT", IDMAP)
6371 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6372 SMB_MODULE(idmap_hash, \$(IDMAP_HASH_OBJ), "bin/hash.$SHLIBEXT", IDMAP)
6373 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6375 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6376 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6378 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6379 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6380 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6381 SMB_MODULE(auth_wbc, \$(AUTH_WBC_OBJ), "bin/wbc.$SHLIBEXT", AUTH)
6382 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6383 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6384 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6385 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6387 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6388 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6389 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6390 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6391 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6392 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6393 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6394 SMB_MODULE(vfs_fake_acls, \$(VFS_FAKE_ACLS_OBJ), "bin/fake_acls.$SHLIBEXT", VFS)
6395 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6396 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6397 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6398 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6399 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6400 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6401 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6402 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6403 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6404 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6405 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6406 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6407 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6408 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6409 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6410 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6411 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6412 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6413 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6414 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6415 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6416 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6417 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6418 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6419 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6420 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6421 SMB_MODULE(vfs_aio_pthread, \$(VFS_AIO_PTHREAD_OBJ), "bin/aio_pthread.$SHLIBEXT", VFS)
6422 SMB_MODULE(vfs_aio_posix, \$(VFS_AIO_POSIX_OBJ), "bin/aio_posix.$SHLIBEXT", VFS)
6423 SMB_MODULE(vfs_aio_linux, \$(VFS_AIO_LINUX_OBJ), "bin/aio_linux.$SHLIBEXT", VFS)
6424 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6425 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6426 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6427 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6428 SMB_MODULE(vfs_acl_xattr, \$(VFS_ACL_XATTR_OBJ), "bin/acl_xattr.$SHLIBEXT", VFS)
6429 SMB_MODULE(vfs_acl_tdb, \$(VFS_ACL_TDB_OBJ), "bin/acl_tdb.$SHLIBEXT", VFS)
6430 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6431 SMB_MODULE(vfs_dirsort, \$(VFS_DIRSORT_OBJ), "bin/dirsort.$SHLIBEXT", VFS)
6432 SMB_MODULE(vfs_scannedonly, \$(VFS_SCANNEDONLY_OBJ), "bin/scannedonly.$SHLIBEXT", VFS)
6433 SMB_MODULE(vfs_crossrename, \$(VFS_CROSSRENAME_OBJ), "bin/crossrename.$SHLIBEXT", VFS)
6434 SMB_MODULE(vfs_linux_xfs_sgid, \$(VFS_LINUX_XFS_SGID_OBJ), "bin/linux_xfs_sgid.$SHLIBEXT", VFS)
6435 SMB_MODULE(vfs_time_audit, \$(VFS_TIME_AUDIT_OBJ), "bin/time_audit.$SHLIBEXT", VFS)
6436 SMB_MODULE(vfs_media_harmony, \$(VFS_MEDIA_HARMONY_OBJ), "bin/media_harmony.$SHLIBEXT", VFS)
6438 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6440 SMB_MODULE(perfcount_test, \$(PERFCOUNT_TEST), "bin/pc_test.$SHLIBEXT", PERFCOUNT)
6441 SMB_SUBSYSTEM(PERFCOUNT,smbd/perfcount.o)
6443 SMB_MODULE(gpext_registry, libgpo/gpext/registry.o, "bin/registry.$SHLIBEXT", GPEXT)
6444 SMB_MODULE(gpext_scripts, libgpo/gpext/scripts.o, "bin/scripts.$SHLIBEXT", GPEXT)
6445 SMB_MODULE(gpext_security, libgpo/gpext/security.o, "bin/security.$SHLIBEXT", GPEXT)
6446 SMB_SUBSYSTEM(GPEXT, libgpo/gpext/gpext.o)
6448 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6450 #################################################
6451 # do extra things if we are running insure
6453 if test "${ac_cv_prog_CC}" = "insure"; then
6454         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6457 #################################################
6458 # If run from the build farm, enable NASTY hacks
6459 #################################################
6460 AC_MSG_CHECKING(whether to enable features for selftest)
6461 if test x"$selftest" = x"yes"; then
6462         AC_MSG_RESULT(yes)
6463         AC_DEFINE(ENABLE_SELFTEST, 1, [Support features needed for selftest])
6464 else
6465         AC_MSG_RESULT(no)
6468 #################################################
6469 # check for bad librt/libpthread interactions
6471 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6472     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6473     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6474     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6476 SMB_IF_RTSIGNAL_BUG(
6477         [
6478             # Have RT_SIGNAL bug, need to check whether the problem will
6479             # affect anything we have configured.
6481             rt_do_error=no
6482             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6483                 if test x"$rt_signal_lease_ok" = x"no" ; then
6484                     rt_do_error=yes
6485                 fi
6486             fi
6488             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6489                 if test x"$rt_signal_notify_ok" = x"no" ; then
6490                     rt_do_error=yes
6491                 fi
6492             fi
6494             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6495                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6496                 if test x"$rt_signal_aio_ok" = x"no" ; then
6497                     rt_do_error=yes
6498                 fi
6499             fi
6501             if test x"$rt_do_error" = x"yes" ; then
6502                 SMB_IS_LIBPTHREAD_LINKED(
6503                     [
6504                         cat<<MSG
6506 *** On this platforms, linking Samba against pthreads causes problems
6507 *** with the oplock and change notification mechanisms. You may be
6508 *** using pthreads as a side-effect of using the --with-aio-support
6509 *** or --with-profiling-data options. Please remove these and try again.
6512                     ],
6513                     [
6514                         cat<<MSG
6516 *** On this platform, the oplock and change notification mechanisms do not
6517 *** appear to work. Please report this problem to samba-technical@samba.org
6518 *** and attach the config.log file from this directory.
6521                     ])
6522                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6523             fi
6524         ],
6525         [
6526             # no RT_SIGNAL bug, we are golden
6527             SMB_IS_LIBPTHREAD_LINKED(
6528                 [
6529                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6530                 ])
6532         ],
6533         [
6534             # cross compiling, I hope you know what you are doing
6535             true
6536         ])
6540 m4_include(../lib/zlib/zlib.m4)
6542 if test x$smbtorture4_possible = xyes; then
6543         SMBTORTURE4="bin/smbtorture4"
6544         AC_SUBST(SMBTORTURE4)
6547 AC_SUBST(ZLIB_LIBS)
6548 AC_SUBST(ZLIB_OBJS)
6549 AC_ZLIB([ZLIB_OBJS=""], [
6550         ZLIB_LIBS=""
6551         for o in adler32.o compress.o crc32.o gzio.o uncompr.o \
6552                      deflate.o trees.o zutil.o inflate.o infback.o \
6553                          inftrees.o inffast.o
6554         do
6555                 ZLIB_OBJS="$ZLIB_OBJS ../lib/zlib/$o"
6556         done
6557         CFLAGS="-I../lib/zlib $CFLAGS"
6560 AC_DEFINE(STATIC_gensec_MODULES, [gensec_spnego_init,gensec_ntlmssp_init,NULL],[gensec modules])
6561 AC_DEFINE(STATIC_gensec_MODULES_PROTO, [_MODULE_PROTO(gensec_spnego_init)_MODULE_PROTO(gensec_ntlmssp_init)],[gensec protos])
6563 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
6565 if test "x$enable_dmalloc" = xyes
6566 then
6567         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
6568         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
6569                   [Define to check invariants around some common functions])
6570         LIBS="$LIBS -ldmalloc"
6573 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6574 LIB_REMOVE_USR_LIB(LDFLAGS)
6575 LIB_REMOVE_USR_LIB(LIBS)
6577 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6578 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6579 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6581 #################################################
6582 # Display summary of libraries detected
6584 AC_MSG_RESULT([Using libraries:])
6585 AC_MSG_RESULT([    LIBS = $LIBS])
6586 if test x"$with_ads_support" != x"no"; then
6587     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6589 if test x"$with_ldap_support" != x"no"; then
6590     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6592 if test x"$have_dnssd_support" != x"no"; then
6593     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6595 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6597 #################################################
6598 # final configure stuff
6600 AC_MSG_CHECKING([configure summary])
6601 AC_TRY_RUN([#include "${srcdir-.}/../tests/summary.c"],
6602            AC_MSG_RESULT(yes),
6603            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6604            AC_MSG_WARN([cannot run when cross-compiling]))
6606 dnl Merge in developer cflags from now on
6607 AC_SUBST(DEVELOPER_CFLAGS)
6608 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes" -o x"$picky_developer" = x"yes"; then
6609     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS) ${CFLAGS_APPEND}"
6612 # Stuff the smbd-only libraries at the end of the smbd link
6613 # path (if we have them).
6614 SMBD_LIBS="$samba_dmapi_libs"
6615 AC_SUBST(SMBD_LIBS)
6617 CFLAGS="${CFLAGS} \$(FLAGS)"
6618 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
6620 # If we had to expand the includes, make tsure the output file is moved back
6621 AC_OUTPUT_COMMANDS([
6622 if test -f Makefile-noincludes -a ! -f Makefile -a ! -h Makefile ; then
6623         ln -s Makefile-noincludes Makefile
6627 AC_OUTPUT(Makefile
6628           script/findsmb smbadduser script/installbin.sh script/uninstallbin.sh
6629           lib/netapi/examples/Makefile
6630           lib/netapi/tests/Makefile
6631           pkgconfig/smbclient.pc
6632           pkgconfig/wbclient.pc
6633           pkgconfig/netapi.pc
6634           pkgconfig/smbsharemodes.pc
6635           ../examples/libsmbclient/Makefile.internal
6636           )
6638 #################################################
6639 # Print very concise instructions on building/use
6640 if test "x$enable_dmalloc" = xyes
6641 then
6642         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6643         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])