s3:registry: do not use regdb functions during db upgrade
[Samba/gebeck_regimport.git] / source3 / configure.in
blob46c98aa12ca0a4a0aea829de920cff58858f4763
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 -Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
39 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/replace"
40 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TEVENT_CFLAGS}"
41 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CCAN_CFLAGS}"
42 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
43 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/.."
44 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/tdb_compat"
46 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/popt"
48 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
49 if test "x${srcdir-.}" != "x."; then
50         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
53 dnl Unique-to-Samba variables we'll be playing with.
54 AC_SUBST(SAMBA_CPPFLAGS)
55 AC_SUBST(SHELL)
56 AC_SUBST(LDSHFLAGS)
57 AC_SUBST(SONAMEFLAG)
58 AC_SUBST(SHLD)
59 AC_SUBST(MODULE_EXPORTS)
60 AC_SUBST(DSO_EXPORTS)
61 AC_SUBST(HOST_OS)
62 AC_SUBST(PICFLAG)
63 AC_SUBST(PIE_CFLAGS)
64 AC_SUBST(PIE_LDFLAGS)
65 AC_SUBST(RELRO_LDFLAGS)
66 AC_SUBST(SHLIBEXT)
67 AC_SUBST(INSTALLLIBCMD_SH)
68 AC_SUBST(INSTALLLIBCMD_A)
69 AC_SUBST(UNINSTALLLIBCMD_SH)
70 AC_SUBST(UNINSTALLLIBCMD_A)
72 AC_SUBST(INSTALL_LIBWBCLIENT)
73 AC_SUBST(UNINSTALL_LIBWBCLIENT)
74 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
75 AC_SUBST(LIBWBCLIENT_SHARED_TARGET_SOVER)
76 AC_SUBST(LIBWBCLIENT_SHARED_TARGET_FULLVER)
77 AC_SUBST(LIBWBCLIENT_SHARED)
78 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
79 AC_SUBST(LIBWBCLIENT_STATIC)
80 AC_SUBST(LIBWBCLIENT_SOVER)
81 AC_SUBST(LIBWBCLIENT_FULLVER)
82 AC_SUBST(LIBWBCLIENT)
83 AC_SUBST(LIBWBCLIENT_LIBS)
85 AC_SUBST(LIBSAMBAUTIL_SHARED)
87 AC_SUBST(PRINT_LIBS)
88 AC_SUBST(AUTH_LIBS)
89 AC_SUBST(ACL_LIBS)
90 AC_SUBST(PASSDB_LIBS)
91 AC_SUBST(IDMAP_LIBS)
92 AC_SUBST(KRB5_LIBS)
93 AC_SUBST(UUID_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 look for executable suffix
273 AC_EXEEXT
275 dnl Check if C compiler understands -c and -o at the same time
276 AC_PROG_CC_C_O
277 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
278       BROKEN_CC=
279 else
280       BROKEN_CC=#
282 AC_SUBST(BROKEN_CC)
284 dnl Check if the C compiler understands -Werror (GNU)
285 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
286  AC_TRY_RUN_STRICT([
287   int main(void)
288   {
289         return 0;
290   }],[$CFLAGS -Werror],[$CPPFLAGS],[$LDFLAGS],
291   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
292 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
293    Werror_FLAGS="-Werror"
294 else
295 dnl Check if the C compiler understands -w2
296 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
297  AC_TRY_RUN_STRICT([
298   int main(void)
299   {
300         return 0;
301   }],[$CFLAGS -w2],[$CPPFLAGS],[$LDFLAGS],
302   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
303 if test x"$samba_cv_HAVE_w2" = x"yes"; then
304    Werror_FLAGS="-w2"
305 else
306 dnl Check if the C compiler understands -errwarn (Sun)
307 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
308   AC_TRY_RUN_STRICT([
309    int main(void)
310    {
311         return 0;
312    }],[$CFLAGS -errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
313    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
314 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
315    Werror_FLAGS="-errwarn=%all"
316 else
317 dnl Check if the C compiler understands -qhalt (IBM)
318 AC_CACHE_CHECK([that the C compiler understands -qhalt],samba_cv_HAVE_qhalt, [
319   AC_TRY_RUN_STRICT([
320    int main(void)
321    {
322         return 0;
323    }],[$CFLAGS -qhalt=w],[$CPPFLAGS],[$LDFLAGS],
324    samba_cv_HAVE_qhalt=yes,samba_cv_HAVE_qhalt=no,samba_cv_HAVE_qhalt=cross)])
325 if test x"$samba_cv_HAVE_qhalt" = x"yes"; then
326    Werror_FLAGS="-qhalt=w"
332 ############################################
333 # check if the compiler can handle negative enum values
334 # and don't truncate the values to INT_MAX
335 # a runtime test is needed here
336 AC_SUBST(PIDL_ARGS)
337 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
338     AC_TRY_RUN(
340         #include <stdio.h>
341         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
342         int main(void) {
343                 enum negative_values v1 = NEGATIVE_VALUE;
344                 unsigned v2 = NEGATIVE_VALUE;
346                 if (v1 != 0xFFFFFFFF) {
347                         printf("%u != 0xFFFFFFFF\n", v1);
348                         return 1;
349                 }
350                 if (v2 != 0xFFFFFFFF) {
351                         printf("%u != 0xFFFFFFFF\n", v2);
352                         return 1;
353                 }
355                 return 0;
356         }
358         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv_CC_NEGATIVE_ENUM_VALUES=no)])
359 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
360         AC_MSG_WARN([using --uint-enums for pidl])
361         PIDL_ARGS="$PIDL_ARGS --uint-enums"
364 dnl Figure out the flags to support named structure initializers
366 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
368 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
369 AC_MSG_CHECKING(uname -s)
370 AC_MSG_RESULT(${UNAME_S})
372 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
373 AC_MSG_CHECKING(uname -r)
374 AC_MSG_RESULT(${UNAME_R})
376 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
377 AC_MSG_CHECKING(uname -m)
378 AC_MSG_RESULT(${UNAME_M})
380 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
381 AC_MSG_CHECKING(uname -p)
382 AC_MSG_RESULT(${UNAME_P})
384 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
385 AC_MSG_CHECKING(uname -i)
386 AC_MSG_RESULT(${UNAME_I})
388 dnl Add #include for broken IRIX header files
389   case "$host_os" in
390         *irix6*)
391                 #TODO add to libreplace
392                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
393                         dnl Fix sensible defaults for MIPSPro compilers. The
394                         dnl error numbers are valid for the 7.3 compilers,
395                         dnl hopefully also valid for the 7.4 series.
396                         dnl
397                         dnl Bugzilla 3801. Force an error on warning 1035
398                         dnl so we don't incorrectly detect stdint.h. This
399                         dnl warning is emitted for #error directives.
400                         CFLAGS="$CFLAGS -diag_error 1035"
401                         dnl 1209: Controlling expression is constant
402                         dnl 1174: Function foo declared but never referenced
403                         dnl 3201: Parameter foo was never referenced
404                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
405                 fi
406         ;;
407 esac
409 DYNEXP=
410 AC_SUBST(DYNEXP)
411 LDSHFLAGS_Z_DEFS=
412 AC_SUBST(LDSHFLAGS_Z_DEFS)
413 LDSHFLAGS_Z_NODEFS=
414 AC_SUBST(LDSHFLAGS_Z_NODEFS)
416 dnl Add modules that have to be built by default here
417 dnl These have to be built static:
418 default_static_modules=""
419 default_static_modules="$default_static_modules pdb_smbpasswd"
420 default_static_modules="$default_static_modules pdb_tdbsam"
421 default_static_modules="$default_static_modules pdb_wbc_sam"
422 default_static_modules="$default_static_modules rpc_lsarpc"
423 default_static_modules="$default_static_modules rpc_samr"
424 default_static_modules="$default_static_modules rpc_winreg"
425 default_static_modules="$default_static_modules rpc_initshutdown"
426 default_static_modules="$default_static_modules rpc_dssetup"
427 default_static_modules="$default_static_modules rpc_wkssvc"
428 default_static_modules="$default_static_modules rpc_svcctl"
429 default_static_modules="$default_static_modules rpc_ntsvcs"
430 default_static_modules="$default_static_modules rpc_netlogon"
431 default_static_modules="$default_static_modules rpc_netdfs"
432 default_static_modules="$default_static_modules rpc_srvsvc"
433 default_static_modules="$default_static_modules rpc_spoolss"
434 default_static_modules="$default_static_modules rpc_eventlog"
435 default_static_modules="$default_static_modules auth_sam"
436 default_static_modules="$default_static_modules auth_unix"
437 default_static_modules="$default_static_modules auth_winbind"
438 default_static_modules="$default_static_modules auth_wbc"
439 default_static_modules="$default_static_modules auth_server"
440 default_static_modules="$default_static_modules auth_domain"
441 default_static_modules="$default_static_modules auth_builtin"
442 default_static_modules="$default_static_modules vfs_default"
443 default_static_modules="$default_static_modules nss_info_template"
445 dnl These are preferably build shared, and static if dlopen() is not available
446 default_shared_modules=""
447 default_shared_modules="$default_shared_modules vfs_recycle"
448 default_shared_modules="$default_shared_modules vfs_audit"
449 default_shared_modules="$default_shared_modules vfs_extd_audit"
450 default_shared_modules="$default_shared_modules vfs_full_audit"
451 default_shared_modules="$default_shared_modules vfs_netatalk"
452 default_shared_modules="$default_shared_modules vfs_fake_perms"
453 default_shared_modules="$default_shared_modules vfs_default_quota"
454 default_shared_modules="$default_shared_modules vfs_readonly"
455 default_shared_modules="$default_shared_modules vfs_cap"
456 default_shared_modules="$default_shared_modules vfs_expand_msdfs"
457 default_shared_modules="$default_shared_modules vfs_shadow_copy"
458 default_shared_modules="$default_shared_modules vfs_shadow_copy2"
459 default_shared_modules="$default_shared_modules auth_script"
460 default_shared_modules="$default_shared_modules vfs_readahead"
461 default_shared_modules="$default_shared_modules vfs_xattr_tdb"
462 default_shared_modules="$default_shared_modules vfs_streams_xattr"
463 default_shared_modules="$default_shared_modules vfs_streams_depot"
464 default_shared_modules="$default_shared_modules vfs_acl_xattr"
465 default_shared_modules="$default_shared_modules vfs_acl_tdb"
466 default_shared_modules="$default_shared_modules vfs_smb_traffic_analyzer"
467 default_shared_modules="$default_shared_modules vfs_preopen"
468 default_shared_modules="$default_shared_modules vfs_catia"
469 default_shared_modules="$default_shared_modules vfs_scannedonly"
470 default_shared_modules="$default_shared_modules vfs_crossrename"
471 default_shared_modules="$default_shared_modules vfs_linux_xfs_sgid"
472 default_shared_modules="$default_shared_modules vfs_time_audit"
473 default_shared_modules="$default_shared_modules idmap_autorid"
475 if test "x$developer" = xyes; then
476    default_static_modules="$default_static_modules rpc_rpcecho pdb_ads"
477    default_static_modules="$default_static_modules auth_netlogond"
478    default_shared_modules="$default_shared_modules perfcount_test"
482 # Config CPPFLAG settings for strange OS's that must be set
483 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
484 # case statement; its first reference must be unconditional.
486 case "$host_os" in
487     *hpux*)
489 # Defines needed for HPUX support.
490 # HPUX has bigcrypt but (sometimes?) doesn't use it for
491 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
493       case `uname -r` in
494                 *9*|*10*|*11)
495                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
496                 ;;
497       esac
498       ;;
501 # CRAY Unicos has broken const handling
502        *unicos*)
503           AC_MSG_RESULT([disabling const])
504           CPPFLAGS="$CPPFLAGS -Dconst="
505           ;;
506         
508 # AIX4.x doesn't even admit to having large
509 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
511     *aix4*)
512           AC_MSG_RESULT([enabling large file support])
513       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
514           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
515       ;;
517 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
518 # to the existance of large files..
519 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
520 # recommendations on large file support, however it makes the
521 # compile work using gcc 2.7 and 2.8, whereas using the Sun
522 # recommendation makes the compile fail on gcc2.7. JRA.
524 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
526         *solaris*)
527                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
528                 case `uname -r` in
529                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
530                                 AC_MSG_RESULT([no large file support])
531                                 ;;
532                         5.*)
533                         LDFLAGS="$LDFLAGS -lthread"
534                         CPPFLAGS="$CPPFLAGS -D_REENTRANT"
535                         AC_MSG_RESULT([enabling large file support])
536                         if test "$ac_cv_prog_gcc" = yes; then
537                                 ${CC-cc} -v >conftest.c 2>&1
538                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
539                                 rm -fr conftest.c
540                                 case "$ac_cv_gcc_compiler_version_number" in
541                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
542                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE"
543                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
544                                                 ;;
545                                         *)
546                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
547                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
548                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
549                                                 ;;
550                                 esac
551                         else
552                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
553                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
554                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
555                         fi
556                         ;;
557                 esac
558                 ;;
560 # IRIX uses SYSV printing.  Make sure to set that here
562         *irix*)
563                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
564                 ;;
565         *freebsd*|*dragonfly*)
566                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
567                 ;;
569 # VOS may need to have POSIX support and System V compatibility enabled.
571     *vos*)
572     case "$CPPFLAGS" in
573           *-D_POSIX_C_SOURCE*)
574                 ;;
575           *)
576                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
577                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
578                 ;;
579     esac
580     case "$CPPFLAGS" in
581           *-D_SYSV*|*-D_SVID_SOURCE*)
582                 ;;
583           *)
584                 CPPFLAGS="$CPPFLAGS -D_SYSV"
585                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
586     esac
587     ;;
589 # Tests needed for SINIX large file support.
591     *sysv4*)
592       if test $host = mips-sni-sysv4 ; then
593         AC_MSG_CHECKING([for LFS support])
594         old_CPPFLAGS="$CPPFLAGS"
595         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
596         AC_TRY_RUN([
597 #include <unistd.h>
598 main () {
599 #if _LFS64_LARGEFILE == 1
600 exit(0);
601 #else
602 exit(1);
603 #endif
604 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
605         CPPFLAGS="$old_CPPFLAGS"
606         if test x$SINIX_LFS_SUPPORT = xyes ; then
607           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
608                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
609           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
610           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
611           LIBS="`getconf LFS64_LIBS` $LIBS"
612         fi
613       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
614       fi
615     ;;
617 # Systems with LFS support.
619     gnu* | k*bsd*-gnu | kopensolaris*-gnu)
620         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
621         AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
622         AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
623         AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
624         ;;
626 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
628     *linux*)
629         AC_MSG_CHECKING([for LFS support])
630         old_CPPFLAGS="$CPPFLAGS"
631         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
632        AC_TRY_RUN([
633 #include <unistd.h>
634 #include <sys/utsname.h>
635 #include <string.h>
636 #include <stdlib.h>
637 main() {
638 #if _LFS64_LARGEFILE == 1
639        struct utsname uts;
640        char *release;
641        int major, minor;
643        /* Ensure this is glibc 2.2 or higher */
644 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
645        int libc_major = __GLIBC__;
646        int libc_minor = __GLIBC_MINOR__;
648        if (libc_major < 2)
649               exit(1);
650        if (libc_minor < 2)
651               exit(1);
652 #endif
654        /* Ensure this is kernel 2.4 or higher */
656        uname(&uts);
657        release = strdup(uts.release);
658        major = atoi(strsep(&release, "."));
659        minor = atoi(strsep(&release, "."));
661        if (major > 2 || (major == 2 && minor > 3))
662                exit(0);
663        exit(1);
664 #else
665        exit(1);
666 #endif
668 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
669         CPPFLAGS="$old_CPPFLAGS"
670         if test x$LINUX_LFS_SUPPORT = xyes ; then
671                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
672                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
673                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
674                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
675         fi
676         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
677         ;;
680 # MacOS X is the *only* system that uses compose character in utf8. This
681 # is so horribly broken....
683     *darwin*)
684         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
686 # Add a system specific charset module.
687         default_shared_modules="$default_shared_modules"
689         ;;
690     *hurd*)
691         AC_MSG_CHECKING([for LFS support])
692         old_CPPFLAGS="$CPPFLAGS"
693         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
694         AC_TRY_RUN([
695 #include <unistd.h>
696 main () {
697 #if _LFS64_LARGEFILE == 1
698 exit(0);
699 #else
700 exit(1);
701 #endif
702 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
703         CPPFLAGS="$old_CPPFLAGS"
704         if test x$GLIBC_LFS_SUPPORT = xyes ; then
705           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
706                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
707           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
708         fi
709       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
710     ;;
711     *qnx*)
712         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
713         AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
714         ;;
716 esac
718 SAVE_CPPFLAGS="${CPPFLAGS}"
719 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
721 AC_LIBREPLACE_BROKEN_CHECKS
722 AC_CHECK_FUNCS([syslog],[],[AC_MSG_ERROR([Required function not found])])
723 AC_LIBREPLACE_NETWORK_CHECKS
725 CPPFLAGS="${SAVE_CPPFLAGS}"
727 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
729 LIBREPLACE_OBJS="${LIBREPLACEOBJ}"
730 AC_SUBST(LIBREPLACE_OBJS)
732 LIBREPLACE_LIBS="${LIBREPLACE_NETWORK_LIBS}"
733 AC_SUBST(LIBREPLACE_LIBS)
736 # add -ldl to the global LIBS
737 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
738 AUTH_LIBS="${AUTH_LIBS} ${CRYPT_LIBS}"
741 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
742 AC_CHECK_HEADERS(unistd.h grp.h sys/id.h memory.h alloca.h)
743 AC_CHECK_HEADERS(limits.h float.h libintl.h)
744 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
745 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)
746 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
747 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
748 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
749 AC_CHECK_HEADERS(sys/sysmacros.h)
750 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
751 AC_CHECK_HEADERS(langinfo.h locale.h)
752 AC_CHECK_HEADERS(xfs/libxfs.h)
753 AC_CHECK_HEADERS(netgroup.h)
754 AC_CHECK_HEADERS(linux/falloc.h)
756 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
757 #if HAVE_RPC_RPC_H
758 #include <rpc/rpc.h>
759 #endif
762 ## These fail to compile on IRIX so just check for their presence
763 AC_CHECK_HEADERS(sys/mode.h,,,)
765 # Look for Darwin headers
766 old_CPPFLAGS="$CPPFLAGS"
767 CPPFLAGS="-Iinclude $CPPFLAGS"
768 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
769 CPPFLAGS="$old_CPPFLAGS"
771 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
772 # subdirectory of headers.
773 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
775 if test x"$enable_developer" = x"yes" ; then
776    if test x"$ac_cv_header_valgrind_h" = xyes -o \
777            x"$ac_cv_header_valgrind_valgrind_h" = xyes ; then
778       AC_DEFINE(VALGRIND,1,[Whether we have valgrind headers])
779    fi
783 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
784 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
786 case "$host_os" in
787     *hpux*)
788                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
789                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
790                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
791                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
792                 fi
793         ;;
794 esac
795 AC_CHECK_HEADERS(shadow.h)
796 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
797 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
799 AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
800 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
802 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
804 # For experimental utmp support (lastlog on some BSD-like systems)
805 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
807 AC_CHECK_SIZEOF(int,cross)
808 AC_CHECK_SIZEOF(long,cross)
809 AC_CHECK_SIZEOF(long long,cross)
810 AC_CHECK_SIZEOF(short,cross)
812 AC_C_CONST
813 AC_C_INLINE
814 AC_C_BIGENDIAN
815 AC_C_CHAR_UNSIGNED
817 AC_TYPE_SIGNAL
818 AC_TYPE_UID_T
819 AC_TYPE_MODE_T
820 AC_TYPE_OFF_T
821 AC_TYPE_SIZE_T
822 AC_TYPE_PID_T
823 AC_STRUCT_ST_RDEV
824 AC_DIRENT_D_OFF
825 AC_CHECK_TYPE(ssize_t, int)
826 AC_CHECK_TYPE(wchar_t, unsigned short)
828 ############################################
829 # for cups support we need libcups, and a handful of header files
831 AC_ARG_ENABLE(cups,
832 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
834 if test x$enable_cups != xno; then
835         AC_PATH_PROG(CUPS_CONFIG, cups-config)
837         if test "x$CUPS_CONFIG" != x; then
839                 ac_save_LDFLAGS=$LDFLAGS
840                 ac_save_PRINT_LIBS=$PRINT_LIBS
841                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
843                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
844                         x"$ac_cv_header_cups_language_h" = xyes; then
845                         # try linking with -lcups alone first. That should work unless libcups is
846                         # underlinked. With cups-config --libs we pull in unwanted and unneeded
847                         # dendencies including thread libraries - use cups-config only if really
848                         # required. 
849                         AC_CHECK_LIB_EXT(cups, ac_save_PRINT_LIBS , httpConnect,
850                                 [PRINT_LIBS="$ac_save_PRINT_LIBS -lcups"],
851                                 [AC_MSG_WARN([your cups library doesn't link with -lcups alone, it might be underlinked.]) ;
852                                  PRINT_LIBS="$ac_save_PRINT_LIBS `$CUPS_CONFIG --libs`"])
854                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
855                         samba_cv_HAVE_CUPS=yes
856                         AC_CHECK_LIB_EXT(cups, PRINT_LIBS, httpConnectEncrypt)
857                 else
858                         AC_MSG_WARN([cups-config around but cups-devel not installed])
859                         CFLAGS=$ac_save_CFLAGS
860                         LDFLAGS=$ac_save_LDFLAGS
861                         PRINT_LIBS=$ac_save_PRINT_LIBS
862                 fi
864         elif test x"$enable_cups" = x"yes"; then
865                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
866         fi
869 AC_ARG_ENABLE(iprint,
870 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
872 if test x$enable_iprint != xno; then
873         if test x"$samba_cv_HAVE_CUPS" = xyes; then
874                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
875         elif test x"$enable_iprint" = x"yes"; then
876                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
877         fi
880 ############################################
881 # check if the compiler will optimize out function calls
882 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
883     AC_TRY_LINK([
884 #include <stdio.h>],
886                 if (0) {
887                    this_function_does_not_exist();
888                 } else {
889                   return 1;
890                 }
893         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
894 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
895    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
898 #############################################
899 # check for fd passing struct via msg_control
900 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
901     AC_TRY_COMPILE([
902 #include <sys/types.h>
903 #include <stdlib.h>
904 #include <stddef.h>
905 #include <sys/socket.h>
906 #include <sys/un.h>],
908         struct msghdr msg;
909         union {
910               struct cmsghdr cm;
911               char control[CMSG_SPACE(sizeof(int))];
912         } control_un;
913         msg.msg_control = control_un.control;
914         msg.msg_controllen = sizeof(control_un.control);
916         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
917 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
918    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
919              [If we can use msg_control for passing file descriptors])
922 #############################################
923 # check for fd passing struct via msg_acctrights
924 AC_CACHE_CHECK([for fd passing via msg_acctrights],
925                 samba_cv_msghdr_msg_acctrights, [
926     AC_TRY_COMPILE([
927 #include <sys/types.h>
928 #include <stdlib.h>
929 #include <stddef.h>
930 #include <sys/socket.h>
931 #include <sys/un.h>],
933         struct msghdr msg;
934         int fd;
935         msg.msg_acctrights = (caddr_t) &fd;
936         msg.msg_acctrightslen = sizeof(fd);
938         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
939 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
940    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
941              [If we can use msg_acctrights for passing file descriptors])
944 AC_CHECK_FUNCS(dirfd)
945 if test x"$ac_cv_func_dirfd" = x"yes"; then
946         default_shared_modules="$default_shared_modules vfs_syncops vfs_dirsort"
949 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
950     AC_TRY_COMPILE([
951 #include <sys/types.h>
952 #if STDC_HEADERS
953 #include <stdlib.h>
954 #include <stddef.h>
955 #endif
956 #include <signal.h>],[struct sigevent s;],
957         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
958 if test x"$samba_cv_struct_sigevent" = x"yes"; then
959    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
960    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
961         [#include <signal.h>])
964 # and glibc has setresuid under linux but the function does
965 # nothing until kernel 2.1.44! very dumb.
966 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
967     AC_TRY_RUN([#include <errno.h>
968 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
969         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
970 if test x"$samba_cv_have_setresuid" = x"yes"; then
971     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
974 # Do the same check for setresguid...
976 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
977     AC_TRY_RUN([#include <unistd.h>
978 #include <errno.h>
979 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
980         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
981 if test x"$samba_cv_have_setresgid" = x"yes"; then
982     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
985 AC_FUNC_MEMCMP
987 ###############################################
988 # Readline included by default unless explicitly asked not to
989 test "${with_readline+set}" != "set" && with_readline=yes
991 # test for where we get readline() from
992 AC_MSG_CHECKING(whether to use readline)
993 AC_ARG_WITH(readline,
994 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
995 [  case "$with_readline" in
996   yes)
997     AC_MSG_RESULT(yes)
999     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1000     AC_CHECK_HEADERS(readline/history.h)
1002     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1003       for termlib in ncurses curses termcap terminfo termlib tinfo; do
1004        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1005       done
1006       AC_CHECK_LIB(readline, rl_callback_handler_install,
1007        [TERMLIBS="-lreadline $TERMLIBS"
1008        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1009        break], [TERMLIBS=], $TERMLIBS)])
1010     ;;
1011   no)
1012     AC_MSG_RESULT(no)
1013     ;;
1014   *)
1015     AC_MSG_RESULT(yes)
1017     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
1018     # alternate readline path
1019     _ldflags=${LDFLAGS}
1020     _cppflags=${CPPFLAGS}
1022     # Add additional search path
1023     LDFLAGS="-L$with_readline/lib $LDFLAGS"
1024     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1026     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1027     AC_CHECK_HEADERS(readline/history.h)
1029     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1030       for termlib in ncurses curses termcap terminfo termlib; do
1031        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1032       done
1033       AC_CHECK_LIB(readline, rl_callback_handler_install,
1034        [TERMLDFLAGS="-L$with_readline/lib"
1035        TERMCPPFLAGS="-I$with_readline/include"
1036        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1037        TERMLIBS="-lreadline $TERMLIBS"
1038        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1039        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
1041     LDFLAGS=$_ldflags
1042     ;;
1043   esac],
1044   AC_MSG_RESULT(no)
1046 AC_SUBST(TERMLIBS)
1047 AC_SUBST(TERMLDFLAGS)
1049 # The readline API changed slightly from readline3 to readline4, so
1050 # code will generate warnings on one of them unless we have a few
1051 # special cases.
1052 AC_CHECK_LIB(readline, rl_completion_matches,
1053              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
1054                         [Do we have rl_completion_matches?])],
1055              [],
1056              [$TERMLIBS])
1058 # not all readline libs have rl_event_hook or history_list
1059 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1060 AC_CHECK_LIB(readline, history_list,
1061              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1062              [],
1063              [$TERMLIBS])
1065 ###############################################
1066 # test for where we get yp_get_default_domain() from
1067 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1068 AC_CHECK_FUNCS(yp_get_default_domain)
1070 # Check if we have execl, if not we need to compile smbrun.
1071 AC_CHECK_FUNCS(execl)
1072 if test x"$ac_cv_func_execl" = x"no"; then
1073     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1076 AC_CHECK_FUNCS(getcwd fchown chmod fchmod mknod mknod64)
1077 AC_CHECK_FUNCS(strtol)
1078 AC_CHECK_FUNCS(strchr chflags)
1079 AC_CHECK_FUNCS(getrlimit fsync setpgid)
1080 AC_CHECK_FUNCS(fdatasync,,[AC_CHECK_LIB_EXT(rt, LIBS, fdatasync)])
1081 AC_CHECK_FUNCS(setsid glob strpbrk crypt16 getauthuid)
1082 AC_CHECK_FUNCS(sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1083 AC_CHECK_FUNCS(initgroups select rdchk getgrnam getgrent pathconf)
1084 AC_CHECK_FUNCS(getgrset)
1085 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf stat64 fstat64)
1086 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt lseek64 ftruncate64 posix_fallocate posix_fallocate64)
1087 AC_CHECK_FUNCS(fallocate fallocate64)
1088 AC_CHECK_FUNCS(fseeko fseek64 fseeko64 ftell64 ftello64 setluid getpwanam)
1089 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1090 AC_CHECK_FUNCS(fdopendir fdopendir64)
1091 AC_CHECK_FUNCS(getpwent_r)
1092 AC_CHECK_FUNCS(getdents64)
1093 AC_CHECK_FUNCS(setenv strcasecmp fcvt fcvtl)
1094 AC_CHECK_FUNCS(syslog vsyslog timegm)
1095 AC_CHECK_FUNCS(setlocale)
1096 AC_CHECK_FUNCS(nanosleep,,[AC_CHECK_LIB_EXT(rt, LIBS, nanosleep)])
1097 AC_CHECK_FUNCS(lutimes futimes utimensat futimens)
1098 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1099 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1100 AC_CHECK_HEADERS(sys/mman.h)
1101 # setbuffer, shmget, shm_open are needed for smbtorture
1102 AC_CHECK_FUNCS(shmget shm_open)
1103 AC_CHECK_FUNCS(gettext dgettext)
1104 AC_CHECK_FUNCS(bindtextdomain textdomain bind_textdomain_codeset)
1105 AC_CHECK_FUNCS(strupr)
1107 # Find a method of generating a stack trace
1108 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1109 # libexecinfo provides backtrace_symbols on FreeBSD
1110 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
1111 AC_CHECK_FUNCS(backtrace_symbols)
1112 AC_CHECK_LIB(exc, trace_back_stack)
1114 # check for sysctlbyname for BSD systems
1115 AC_CHECK_FUNCS(sysctlbyname)
1117 #################################################
1118 # Check to see if core dump directory is defined in linux
1119 # with /proc/sys/kernel/core_pattern
1121 AC_CHECK_FILE([/proc/sys/kernel/core_pattern],
1122         AC_DEFINE(HAVE_SYS_KERNEL_PROC_CORE_PATTERN, 1,
1123         [Whether Linux kernel uses core_pattern for core files]),
1124          [])
1126 #############################
1127 # check if building with gpfs
1128 AC_CHECK_HEADERS(gpfs_gpl.h)
1129 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
1130     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL headers are available])
1131     default_shared_modules="$default_shared_modules vfs_gpfs"
1132     default_shared_modules="$default_shared_modules vfs_gpfs_hsm_notify"
1135 #############################################
1136 # check if building on Isilon OneFS
1137 printf "%s" "checking for Isilon OneFS... "
1138 save_LIBS="$LIBS"
1139 LIBS="$LIBS -lisi_version"
1140 AC_TRY_LINK([#include <isi_version/isi_version.h>],
1141           [get_isilon_copyright()],
1142           samba_cv_HAVE_ONEFS=yes,
1143           samba_cv_HAVE_ONEFS=no)
1144 echo $samba_cv_HAVE_ONEFS
1145 if test x"$samba_cv_HAVE_ONEFS" = x"yes"; then
1146     AC_DEFINE(HAVE_ONEFS,1,[Whether building on Isilon OneFS])
1147     default_shared_modules="$default_shared_modules vfs_onefs vfs_onefs_shadow_copy perfcount_onefs"
1148     default_static_modules="$default_static_modules"
1149     ONEFS_LIBS="-lisi_acl -lisi_ecs -lisi_event -lisi_util"
1150     # Need to also add general libs for oplocks support
1151     save_LIBS="$save_LIBS -lisi_ecs -lisi_event -lisi_util -ldevstat"
1153 AC_SUBST(ONEFS_LIBS)
1154 LIBS="$save_LIBS"
1156 # Note that all the libunwind symbols in the API are defined to internal
1157 # platform-specific version, so we must include libunwind.h before checking
1158 # any of them.
1159 AC_MSG_CHECKING([for libunwind])
1160 save_LIBS=$LIBS
1162 UNWIND_ARCH="unknown"
1163 if test x"$UNAME_I" != x"unknown"; then
1164         UNWIND_ARCH="$UNAME_I"
1165 elif test x"$UNAME_M" != x"unknown"; then
1166         UNWIND_ARCH="$UNAME_M"
1167 elif test x"$UNAME_P" != x"unknown"; then
1168         UNWIND_ARCH="$UNAME_P"
1171 case "$UNWIND_ARCH" in
1172         unknown)
1173                 # This probably won't link without
1174                 # the platform-specific libunwind.
1175                 LIBS="$LIBS -lunwind"
1176                 ;;
1177         i386|i586|i686)
1178                 # Add the platform-specific libunwind module.
1179                 LIBS="$LIBS -lunwind -lunwind-x86"
1180                 ;;
1181         *)
1182                 # Add the platform-specific libunwind module.
1183                 # based on uname -i, uname -m or uname -p
1184                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1185                 ;;
1186 esac
1188 AC_TRY_LINK(
1189     [
1190 #ifdef HAVE_LIBUNWIND_H
1191 #include <libunwind.h>
1192 #endif
1193     ],
1194     [
1195         unw_context_t ctx; unw_cursor_t cur;
1196         char buf[256]; unw_word_t off;
1197         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1198         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1199     ],
1200     [
1201         AC_MSG_RESULT(yes)
1202         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1204         # If we have libunwind, test whether we also have libunwind-ptrace
1205         # which would let us unwind arbitrary processes.
1206         save_LIBS=$LIBS
1207         AC_CHECK_HEADERS(libunwind-ptrace.h)
1208         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1209             [
1210                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1211                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1212                     [Whether libunwind-ptrace.a is available.])
1213             ],
1214             [ LIBUNWIND_PTRACE="" ])
1216         LIBS=$save_LIBS
1217     ],
1218     [
1219         AC_MSG_RESULT(no)
1220         LIBS=$save_LIBS
1221     ])
1223 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1224 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1225     AC_CHECK_HEADERS(sys/ptrace.h)
1226     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1227     AC_TRY_LINK(
1228             [
1229 #if HAVE_SYS_TYPES_H
1230 #include <sys/types.h>
1231 #endif
1232 #if HAVE_SYS_PTRACE_H
1233 #include <sys/ptrace.h>
1234 #endif
1235             ],
1236             [
1237                 pid_t me = (pid_t)-1;
1238                 ptrace(PTRACE_ATTACH, me, 0, 0);
1239                 ptrace(PTRACE_DETACH, me, 0, 0);
1240                 return 0;
1241             ],
1242             [
1243                 AC_MSG_RESULT(yes)
1244                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1245                     [Whether the Linux ptrace(2) interface is available.])
1246             ],
1247             [
1248                 AC_MSG_RESULT(no)
1249                 LIBUNWIND_PTRACE=""
1250             ])
1253 AC_SUBST(LIBUNWIND_PTRACE)
1255 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1256 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1257 AC_CHECK_FUNCS(__getcwd _getcwd)
1258 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1259 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1260 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1261 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1262 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1263 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1264 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1265 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1266 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1267 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1268 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1269 AC_CHECK_FUNCS(prctl)
1271 AC_TRY_COMPILE([
1272 #ifdef HAVE_SYS_PRCTL_H
1273 #include <sys/prctl.h>
1274 #endif
1276 [int i; i = prtcl(0); ],
1277 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1282 case "$host_os" in
1283     *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1284        # glibc <= 2.3.2 has a broken getgrouplist
1285        AC_CACHE_CHECK([for good getgrouplist],samba_cv_linux_getgrouplist_ok,[AC_TRY_RUN([
1286 #include <unistd.h>
1287 #include <sys/utsname.h>
1288 main() {
1289        /* glibc up to 2.3 has a broken getgrouplist */
1290 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1291        int libc_major = __GLIBC__;
1292        int libc_minor = __GLIBC_MINOR__;
1294        if (libc_major < 2)
1295               exit(1);
1296        if ((libc_major == 2) && (libc_minor <= 3))
1297               exit(1);
1298 #endif
1299        exit(0);
1301 ], [samba_cv_linux_getgrouplist_ok=yes],
1302    [samba_cv_linux_getgrouplist_ok=no],
1303    [samba_cv_linux_getgrouplist_ok=cross])])
1304        if test x"$samba_cv_linux_getgrouplist_ok" = x"yes"; then
1305           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1306        fi
1307        ;;
1308     *)
1309        AC_CHECK_FUNCS(getgrouplist)
1310        ;;
1311 esac
1314 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1317 if test x$ac_cv_func_stat64 = xno ; then
1318   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1319   AC_TRY_LINK([
1320 #if defined(HAVE_UNISTD_H)
1321 #include <unistd.h>
1322 #endif
1323 #include <sys/stat.h>
1324 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1325   AC_MSG_RESULT([$ac_cv_func_stat64])
1326   if test x$ac_cv_func_stat64 = xyes ; then
1327     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1328   fi
1331 if test x$ac_cv_func_lstat64 = xno ; then
1332   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1333   AC_TRY_LINK([
1334 #if defined(HAVE_UNISTD_H)
1335 #include <unistd.h>
1336 #endif
1337 #include <sys/stat.h>
1338 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1339   AC_MSG_RESULT([$ac_cv_func_lstat64])
1340   if test x$ac_cv_func_lstat64 = xyes ; then
1341     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1342   fi
1345 if test x$ac_cv_func_fstat64 = xno ; then
1346   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1347   AC_TRY_LINK([
1348 #if defined(HAVE_UNISTD_H)
1349 #include <unistd.h>
1350 #endif
1351 #include <sys/stat.h>
1352 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1353   AC_MSG_RESULT([$ac_cv_func_fstat64])
1354   if test x$ac_cv_func_fstat64 = xyes ; then
1355     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1356   fi
1359 #################################################
1360 # Check whether struct stat has timestamps with sub-second resolution.
1363 samba_cv_stat_hires=no
1364 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec], # Linux, Solaris
1365         [samba_cv_stat_hires=yes])
1366 AC_CHECK_MEMBERS([struct stat.st_mtimensec], # BSD, if defined _POSIX_SOURCE
1367         [samba_cv_stat_hires=yes])
1368 AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec], # BSD, if not defined _POSIX_SOURCE
1369         [samba_cv_stat_hires=yes])
1370 AC_CHECK_MEMBERS([struct stat.st_mtime_n], # AIX
1371         [samba_cv_stat_hires=yes])
1372 AC_CHECK_MEMBERS([struct stat.st_umtime], # Tru64
1373         [samba_cv_stat_hires=yes])
1375 if test x"$samba_cv_stat_hires" = x"yes" ; then
1376     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1377             [whether struct stat has sub-second timestamps])
1380 # recent FreeBSD, NetBSD have creation timestamps called birthtime:
1381 AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec])
1382 AC_CHECK_MEMBERS([struct stat.st_birthtime], AC_CHECK_MEMBERS([struct stat.st_birthtimensec]))
1385 AC_CACHE_CHECK([whether there is DOS flags support in the stat struct], samba_cv_stat_dos_flags,
1386     [
1387         AC_TRY_COMPILE(
1388             [#include <sys/stat.h>],
1389             [
1390                 int a = UF_DOS_ARCHIVE;
1391                 int h = UF_DOS_HIDDEN;
1392                 int r = UF_DOS_RO;
1393                 int s = UF_DOS_SYSTEM;
1394                 int i = UF_DOS_NOINDEX;
1395                 int f = UF_DOS_FLAGS;
1396             ],
1397             samba_cv_stat_dos_flags=yes, samba_cv_stat_dos_flags=no)
1398     ])
1400 if test x"$samba_cv_stat_dos_flags" = x"yes" ; then
1401     AC_DEFINE(HAVE_STAT_DOS_FLAGS, 1, [whether there is DOS flags support in the stat struct])
1404 AC_CACHE_CHECK([whether we can compile with __attribute__((destructor))],
1405                samba_cv_function_attribute_destructor,
1406                [
1407                  AC_COMPILE_IFELSE(
1408                         [
1409                                 __attribute__((destructor))
1410                                 static void cleanup(void) { }
1411                         ],
1412                         samba_cv_function_attribute_destructor=yes)
1413                 ])
1415 if test x"$samba_cv_function_attribute_destructor" = xyes ; then
1416    AC_DEFINE(HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR, 1,
1417              [whether we can compile with __attribute__((destructor))])
1420 #####################################
1421 # needed for SRV lookups
1422 AC_CHECK_LIB(resolv, dn_expand)
1423 AC_CHECK_LIB(resolv, _dn_expand)
1424 AC_CHECK_LIB(resolv, __dn_expand)
1426 AC_TRY_COMPILE([#include <resolv.h>],
1427                [struct __res_state s; res_ninit(&s);],
1428                ac_cv_have_res_ninit=yes,ac_cv_have_res_ninit=no)
1430 if test x"$ac_cv_have_res_ninit" = x"yes"; then
1431         AC_DEFINE(HAVE_RES_NINIT, 1, [Whether we have res_ninit])
1435 # Check for the functions putprpwnam, set_auth_parameters,
1436 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1437 # Needed for OSF1 and HPUX.
1440 AC_LIBTESTFUNC(security, putprpwnam)
1441 AC_LIBTESTFUNC(sec, putprpwnam)
1443 AC_LIBTESTFUNC(security, set_auth_parameters)
1444 AC_LIBTESTFUNC(sec, set_auth_parameters)
1446 # UnixWare 7.x has its getspnam in -lgen
1447 AC_LIBTESTFUNC(gen, getspnam)
1449 AC_LIBTESTFUNC(security, getspnam)
1450 AC_LIBTESTFUNC(sec, getspnam)
1452 AC_LIBTESTFUNC(security, bigcrypt)
1453 AC_LIBTESTFUNC(sec, bigcrypt)
1455 AC_LIBTESTFUNC(security, getprpwnam)
1456 AC_LIBTESTFUNC(sec, getprpwnam)
1458 AC_CHECK_FUNCS(strsignal)
1460 ############################################
1461 # Check for EA implementations
1462 case "$host_os" in
1463   *osf*)
1464         AC_SEARCH_LIBS(getproplist, [proplist])
1465         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1466         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1467         AC_CHECK_FUNCS(sizeof_proplist_entry)
1468   ;;
1469   *freebsd4* | *dragonfly* )
1470         AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1471   ;;
1472   *solaris*)
1473         AC_CHECK_FUNCS(attropen)
1474   ;;
1475   *)
1476         AC_SEARCH_LIBS(getxattr, [attr])
1477         AC_CHECK_FUNCS(getxattr,[
1478                 AC_CHECK_FUNCS(lgetxattr fgetxattr listxattr llistxattr flistxattr removexattr lremovexattr fremovexattr setxattr lsetxattr fsetxattr)
1479                 ])
1480         AC_CHECK_FUNCS(getea,[
1481                 AC_CHECK_FUNCS(fgetea lgetea listea flistea llistea removeea fremoveea lremoveea setea fsetea lsetea)
1482                 ])
1483         AC_CHECK_FUNCS(attr_get,[
1484                 AC_CHECK_FUNCS(attr_list attr_set attr_remove attr_getf attr_listf attr_setf attr_removef)
1485                 ])
1486         AC_CHECK_FUNCS(extattr_delete_file,[
1487                 AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_link extattr_get_fd extattr_get_file extattr_get_link extattr_list_fd extattr_list_file extattr_list_link extattr_set_fd extattr_set_file extattr_set_link)
1488                 ])
1489   ;;
1490 esac
1492 ########################################################
1493 # Do xattr functions take additional options like on Darwin?
1494 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1495         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1496                 old_LIBS=$LIBS
1497                 LIBS="$LIBS $ACL_LIBS"
1498                 AC_TRY_COMPILE([
1499                         #include <sys/types.h>
1500                         #if HAVE_ATTR_XATTR_H
1501                         #include <attr/xattr.h>
1502                         #elif HAVE_SYS_XATTR_H
1503                         #include <sys/xattr.h>
1504                         #endif
1505                 ],[
1506                         getxattr(0, 0, 0, 0, 0, 0);
1507                 ],
1508                 [smb_attr_cv_xattr_add_opt=yes],
1509                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1510         ])
1511         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1512                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1513         fi
1516 AC_DISABLE_STATIC
1517 AC_ENABLE_SHARED
1519 # Set defaults
1520 PIE_CFLAGS=""
1521 PIE_LDFLAGS=""
1522 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1524 if test "x$enable_pie" != xno
1525 then
1526         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1527         [
1528                 cat > conftest.c <<EOF
1529 int foo;
1530 int main () { return 0;}
1532                 if AC_TRY_COMMAND_NO_STDERR([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c])
1533                 then
1534                         samba_cv_fpie=yes
1535                 else
1536                         samba_cv_fpie=no
1537                 fi
1538                 rm -f conftest*
1539         ])
1540         if test x"${samba_cv_fpie}" = x"yes"
1541         then
1542                 PIE_CFLAGS="-fPIE"
1543                 PIE_LDFLAGS="-pie"
1544         fi
1547 # Set defaults
1548 RELRO_LDFLAGS=""
1549 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1551 if test "x$enable_relro" != xno
1552 then
1553         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1554         [
1555                 cat > conftest.c <<EOF
1556 int foo;
1557 main () { return 0;}
1559                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1560                 then
1561                         samba_cv_relro=yes
1562                 else
1563                         samba_cv_relro=no
1564                 fi
1565                 rm -f conftest*
1566         ])
1567         if test x"${samba_cv_relro}" = x"yes"
1568         then
1569                 RELRO_LDFLAGS="-Wl,-z,relro"
1570         fi
1573 # Set defaults
1574 SYMSEXT="syms"
1575 AC_SUBST(SYMSEXT)
1577 # Assume non-shared by default and override below
1578 BLDSHARED="false"
1580 # these are the defaults, good for lots of systems
1581 HOST_OS="$host_os"
1582 LDSHFLAGS="-shared"
1583 MODULE_EXPORTS=""
1584 SONAMEFLAG="#"
1585 SHLD="\${CC} \${CFLAGS}"
1586 PICFLAG="${PIE_CFLAGS}"
1587 SHLIBEXT="so"
1588 DSO_EXPORTS=""
1590 # this bit needs to be modified for each OS that supports share libs
1591 # You need to specify how to create a shared library and
1592   # how to compile C code to produce PIC object files
1594   AC_MSG_CHECKING([ability to build shared libraries])
1596   # and these are for particular systems
1597   case "$host_os" in
1598                 *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu | *qnx*)
1599                         case "$host_os" in
1600                                 *linux*) AC_DEFINE(LINUX,1,[Whether the host os is linux]) ;;
1601                                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx]) ;;
1602                         esac
1603                         BLDSHARED="true"
1604                         LDSHFLAGS="-shared -Wl,-Bsymbolic"
1605                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1606                                 LDSHFLAGS_Z_NODEFS="-Wl,--allow-shlib-undefined"
1607                         fi
1608                         DYNEXP="-Wl,--export-dynamic"
1609                         PICFLAG="-fPIC"
1610                         SONAMEFLAG="-Wl,-soname="
1611                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1612                         ;;
1613                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1614                         BLDSHARED="true"
1615                         if test "${GCC}" = "yes"; then
1616                                 PICFLAG="-fPIC"
1617                                 SONAMEFLAG="-Wl,-soname="
1618                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1619                                         DYNEXP="-Wl,-E"
1620                                 fi
1621                                 LDSHFLAGS="-shared"
1622                         else
1623                                 PICFLAG="-KPIC"
1624                                 LDSHFLAGS="-G"
1625                         fi
1626                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1627                                 SONAMEFLAG="-Wl,-soname="
1628                         else
1629                                 SONAMEFLAG="-Wl,-h,"
1630                         fi
1631                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1632                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1633                         ;;
1634                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1635                         BLDSHARED="true"
1636                         LDSHFLAGS="-G"
1637                         SONAMEFLAG="-Wl,-h,"
1638                         PICFLAG="-KPIC"   # Is this correct for SunOS
1639                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1640                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1641                         ;;
1642                 *netbsd* | *freebsd* | *dragonfly* )
1643                         BLDSHARED="true"
1644                         LDSHFLAGS="-shared"
1645                         DYNEXP="-Wl,--export-dynamic"
1646                         SONAMEFLAG="-Wl,-soname,"
1647                         PICFLAG="-fPIC -DPIC"
1648                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1649                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1650                         ;;
1651                 *openbsd*)  BLDSHARED="true"
1652                         LDSHFLAGS="-shared"
1653                         DYNEXP="-Wl,-Bdynamic"
1654                         SONAMEFLAG="-Wl,-soname,"
1655                         PICFLAG="-fPIC"
1656                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1657                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1658                         ;;
1659                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1660                         case "$host_os" in
1661                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1662                         ;;
1663                         esac
1664                         BLDSHARED="true"
1665                         LDSHFLAGS="-Wl,-set_version,sgi1.0 -shared"
1666                         SONAMEFLAG="-Wl,-soname,"
1667                         if test "${GCC}" = "yes"; then
1668                                 PICFLAG="-fPIC"
1669                         else
1670                                 PICFLAG="-KPIC"
1671                         fi
1672                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1673                         ;;
1674                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1675                         BLDSHARED="true"
1676                         # use expfull to export underscored symbols
1677                         # add rtl to remove /lib/crt0.o warning
1678                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1679                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1680                         PICFLAG="-O2"
1681                         # as AIX code is always position independent...
1682                         # .po will just create compile warnings, use po.o:
1683                         if test "${GCC}" != "yes"; then
1684                                 ## for funky AIX compiler using strncpy()
1685                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000 -qhalt=e"
1686                         fi
1688                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1689                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1690                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1691                         ;;
1692                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1693                         # ia64: 64bit build using gcc with CFLAGS="-mpl64"
1694                         #       64bit build using HP's cc with CFLAGS="+DD64"
1695                         # hppa: 64bit build unsupported by gcc
1696                         #       64bit build using HP's cc with CFLAGS="+DA2.0w"
1697                         # HP-UX 11.00 ld needs PHSS_33034
1698                         BLDSHARED="true"
1699                         if test "${GCC}" = "yes"; then
1700                                 PICFLAG="-fPIC"
1701                                 LDSHFLAGS="-shared"
1702                         else
1703                                 PICFLAG="+z"
1704                                 LDSHFLAGS="-b"
1705                                 # "Uses depth-first symbol resolution"
1706                                 LDSHFLAGS="$LDSHFLAGS -Wl,-B,symbolic,-b"
1707                                 if test "$host_cpu" != "ia64"; then
1708                                         # "don't store literals in read-only memory" (?):
1709                                         PICFLAG="$PICFLAG +ESnolit"
1710                                 fi
1711                         fi
1712                         if test "$host_cpu" = "ia64"; then
1713                                 SHLIBEXT="so"
1714                                 # TODO: does the linker find the right 32/64 bit version of the libs? :
1715                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32:/usr/local/lib/hpux64:/usr/lib/hpux64"
1716                         else
1717                                 SHLIBEXT="sl"
1718                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1719                         fi
1720                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1721                                 SONAMEFLAG="-Wl,-soname="
1722                         else
1723                                 SONAMEFLAG="-Wl,+h,"
1724                         fi
1725                         # PIE/PIC flags at link time are required on HP-UX because
1726                         # linking requires a temporary source file, which is being
1727                         # compiled with the indicated flags - which need to contain
1728                         # PIC flags when we don't support PIE flags:
1729                         if test "$PIE_LDFLAGS" = "" ; then
1730                                 PIE_LDFLAGS=\${PICFLAG}
1731                         fi
1732                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1733                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1734                         ;;
1735                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1736                         BLDSHARED="true"
1737                         LDSHFLAGS="-shared"
1738                         SONAMEFLAG="-Wl,-soname,"
1739                         if test "${GCC}" = "yes"; then
1740                                 PICFLAG="-fPIC"
1741                         fi
1742                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1743                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1744                         for flags in "-expect_unresolved '*'" "-Wl,-expect_unresolved,'*'" ; do
1745                                 saved_ldflags="$LDFLAGS"
1746                                 AC_MSG_CHECKING([if $flags works])
1747                                 LDFLAGS="$flags $saved_ldflags"
1748                                 AC_TRY_LINK([],[],
1749                                         [AC_MSG_RESULT([yes])
1750                                         LDSHFLAGS_Z_NODEFS=$flags],
1751                                         AC_MSG_RESULT([no]))
1752                                 LDFLAGS="$saved_ldflags"
1753                                 test x"$LDSHFLAGS_Z_NODEFS" != x && break
1754                         done
1755                         ;;
1756                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1757                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1758                         ;;
1759                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1760                         BLDSHARED="true"
1761                         LDSHFLAGS="-shared"
1762                         SONAMEFLAG="-Wl,-soname,"
1763                         PICFLAG="-KPIC"
1764                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1765                         ;;
1766                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1767                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1768                         ;;
1769                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1770                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1771                         ;;
1772                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1773                         case "$host" in
1774                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1775                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1776                                         fi
1777                                         LDSHFLAGS="-G"
1778                                         DYNEXP="-Bexport"
1779                                 ;;
1780                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1781                         esac
1782                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1783                         ;;
1785                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1786                         if [ test "$GCC" != yes ]; then
1787                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1788                         fi
1789                         LDSHFLAGS="-G"
1790                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1791                         ;;
1792                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1793                         BLDSHARED="false"
1794                         LDSHFLAGS=""
1795                         ;;
1797                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1798                         BLDSHARED="true"
1799                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1800                         CFLAGS="$CFLAGS -fno-common"
1801                         SHLD="\${CC}"
1802                         SHLIBEXT="dylib"
1803                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1804                         SHLIBEXT="dylib"
1805                         # Since gcc doesn't fail on unrecognised options, the
1806                         # PIE test incorrectly succeeds. Darwin gcc does not
1807                         # actually support the PIE stuff.
1808                         PIE_LDFLAGS=
1809                         PIE_CFLAGS=
1810                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1811                         ;;
1813                 *)
1814                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1815                         ;;
1816   esac
1818 if test "$enable_shared" != "yes"; then
1819         BLDSHARED=false
1822 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1823         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1826 if test x"$BLDSHARED" = x"true" ; then
1827         LDFLAGS="$LDFLAGS -L./bin"
1830 AC_MSG_RESULT($BLDSHARED)
1832 if test x"$enable_developer" = x"yes" ; then
1833         default_as_needed=auto
1834 else
1835         default_as_needed=no
1837 AC_ARG_ENABLE(as-needed,
1838         AS_HELP_STRING([--enable-as-needed],
1839         [Turn on as-needed support if available (default=no)]),
1840         [enable_as_needed=$enableval],
1841         [enable_as_needed=$default_as_needed])
1842 if test "x$enable_as_needed" != xno; then
1843     saved_before_as_needed_ldflags="$LDFLAGS"
1844     for flags in "-Wl,--as-needed" "-Wl,-z,ignore" "-z ignore" ; do
1845         saved_ldflags="$LDFLAGS"
1846         AC_MSG_CHECKING([if $flags works])
1847         LDFLAGS="$flags $saved_ldflags"
1848         AC_TRY_LINK([],[],
1849                 [AC_MSG_RESULT([yes])
1850                 LD_AS_NEEDED_FLAG=$flags
1851                 ld_as_needed_flag_found=yes],
1852                 AC_MSG_RESULT([no]))
1853         LDFLAGS="$LD_AS_NEEDED_FLAG $saved_ldflags"
1854         test x"$ld_as_needed_flag_found" = xyes && break
1855     done
1858 if test x$ld_as_needed_flag_found = xyes -a x$enable_as_needed = xauto ; then
1859 # check if ld has bug described in https://bugzilla.samba.org/show_bug.cgi?id=7209#c17
1860         AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG has explicit external libs bug])
1861 cat > conftest_shb.c <<END
1862 void b() {}
1864 cat > conftest_sha.c <<END
1865 extern void b();
1866 void a() {
1867         b();
1870 cat > conftest.c <<END
1871 extern void a();
1872 int main() {
1873         a();
1874         return 0;
1878         rm -fr conftest
1879         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_sha.o conftest_sha.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1880         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_shb.o conftest_shb.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1881         TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1882         AC_TRY_COMMAND([$TESTCMD -o libconftest_shb.$SHLIBEXT conftest_shb.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1883         AC_TRY_COMMAND([$TESTCMD -o libconftest_sha.$SHLIBEXT conftest_sha.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1884         AC_TRY_COMMAND([$CC -o conftest conftest.c $LDFLAGS -L. -lconftest_sha -lconftest_shb 1>&AS_MESSAGE_LOG_FD 2>&1])
1885         if AC_TRY_COMMAND([eval "$LIB_PATH_VAR=. ./conftest 1>&AS_MESSAGE_LOG_FD 2>&1"])
1886         then
1887                 AC_MSG_RESULT([no])
1888         else
1889                 ld_as_needed_flag_found=no
1890                 LDFLAGS="$saved_before_as_needed_ldflags"
1891                 AC_MSG_RESULT([yes])
1892         fi
1893         rm conftest* libconftest*
1896 # check if we have to disable LD_AS_NEEDED_FLAG:
1897 # On some systems for a veriety of reasons linking with
1898 # -Wl,--as-needed -lreadline -lncurses fails
1899 # we have to retest, if these combination is detected before.
1900 # Bugzilla #7209
1902 if test x$ac_cv_lib_readline_rl_callback_handler_install = xyes ; then
1903         if test x$ld_as_needed_flag_found = xyes ; then
1904                 AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG works with readline])
1905                 # try if check no fails
1906                 save_LIBS=$LIBS
1907                 LIBS="$LIBS $TERMLIBS"
1908                 AC_TRY_LINK([], [rl_callback_handler_install();], [AC_MSG_RESULT([yes])],[ AC_MSG_RESULT([no]); LDFLAGS="$saved_before_as_needed_ldflags"])
1909                 LIBS="$save_LIBS"
1910         fi
1915 # for historical reasons almost all linkers don't complain about unresolved
1916 # symbols in shared libs. Except for the internal samba modules we want to get
1917 # errors when we produce a shared lib with unresolved symbols. On some
1918 # platforms unresolved symbols might be intended, so we might have to add
1919 # platform specific exceptions here.
1921 for flags in "-Wl,-z,defs" "-error_unresolved" "-Wl,-error_unresolved" ; do
1922         saved_ldflags="$LDFLAGS"
1923         AC_MSG_CHECKING([if $flags works])
1924         LDFLAGS="$flags $saved_ldflags"
1925         AC_TRY_LINK([],[],
1926         [AC_MSG_RESULT([yes])
1927         LDSHFLAGS_Z_DEFS=$flags
1928         ldshflags_z_defs_found=yes],
1929         AC_MSG_RESULT([no]))
1930         LDFLAGS=$saved_ldflags
1931         test x"$ldshflags_z_defs_found" = xyes && break
1932 done
1934 AC_MSG_CHECKING([LDSHFLAGS_Z_DEFS])
1935 AC_MSG_RESULT([$LDSHFLAGS_Z_DEFS])
1936 AC_MSG_CHECKING([LDFLAGS])
1937 AC_MSG_RESULT([$LDFLAGS])
1938 AC_MSG_CHECKING([DYNEXP])
1939 AC_MSG_RESULT([$DYNEXP])
1941 #######################################################
1942 # test whether building a shared library actually works
1943 if test $BLDSHARED = true; then
1945 AC_MSG_CHECKING([SHLD])
1946 AC_MSG_RESULT([$SHLD])
1947 AC_MSG_CHECKING([LDSHFLAGS])
1948 AC_MSG_RESULT([$LDSHFLAGS])
1950 AC_MSG_CHECKING([SHLIBEXT])
1951 AC_MSG_RESULT([$SHLIBEXT])
1952 AC_MSG_CHECKING([SONAMEFLAG])
1953 AC_MSG_RESULT([$SONAMEFLAG])
1955 AC_MSG_CHECKING([PICFLAG])
1956 AC_MSG_RESULT([$PICFLAG])
1958 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1959 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1961 AC_CACHE_CHECK([whether building shared libraries actually works],
1962                [ac_cv_shlib_works],[
1963    # try building a trivial shared library
1964    ac_cv_shlib_works=no
1965    # The $SHLD and $LDSHFLAGS variables may contain references to other
1966    # variables so they need to be eval'ed.
1967    if AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.o ${srcdir-.}/../tests/shlib.c 1>&AS_MESSAGE_LOG_FD])
1968    then
1969      TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1970      TESTCMD="$TESTCMD -o \"shlib.$SHLIBEXT\" shlib.o"
1971      if AC_TRY_COMMAND([eval $TESTCMD 1>&AS_MESSAGE_LOG_FD 2>&1])
1972      then
1973        ac_cv_shlib_works=yes
1974      fi
1975    fi
1976    rm -f "shlib.$SHLIBEXT" shlib.o
1979 if test $ac_cv_shlib_works = no; then
1980    BLDSHARED=false
1984 if test x"$BLDSHARED" != x"true"; then
1985         LDSHFLAGS="shared-libraries-disabled"
1986         SONAMEFLAG="shared-libraries-disabled"
1987         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1988         SHLD="shared-libraries-disabled"
1989         PICFLAG="${PIE_CFLAGS}"
1990         SHLIBEXT="shared_libraries_disabled"
1991         smbtorture4_possible=no
1994 AC_MSG_CHECKING([used PICFLAG])
1995 AC_MSG_RESULT([$PICFLAG])
1997 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
2001 ###########################################################
2003 # Configuration of subsystems / libraries
2005 ###########################################################
2007 INSTALLLIBCMD_SH=:
2008 INSTALLLIBCMD_A=:
2009 UNINSTALLLIBCMD_SH=:
2010 UNINSTALLLIBCMD_A=:
2012 if test $BLDSHARED = true; then
2013         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
2014         UNINSTALLLIBCMD_SH="rm -f"
2016 if test $enable_static = yes; then
2017         INSTALLLIBCMD_A="\$(INSTALLCMD)"
2018         UNINSTALLLIBCMD_A="rm -f"
2021 #################################################
2022 # --disable-shared-libs
2023 # can be used to disable the internal use of shared libs altogether
2024 # (this only has an effect when building shared libs is enabled)
2026 USESHARED=false
2027 AC_SUBST(USESHARED)
2029 AC_MSG_CHECKING(whether to use shared libraries internally)
2030 AC_ARG_ENABLE([shared-libs],
2031         AS_HELP_STRING([--enable-shared-libs],
2032                 [Use shared libraries internally (default=yes)]),
2033         [enable_shared_libs=$enableval],
2034         [enable_shared_libs=yes])
2036 if test x"$enable_shared_libs" != x"no" ; then
2037         USESHARED=$BLDSHARED
2040 AC_MSG_RESULT([$USESHARED])
2042 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
2043         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
2046 #################################################
2047 # --with-static-libs=LIBS:
2048 #   link (internal) libs dynamically or statically?
2050 # If a subsystem is built as a library then this controls whether they are
2051 # linked into Samba targets statically or dynamically:
2053 # * If we build the shared library at all, we link dynamically by default.
2055 # * We only link statically if we don't build shared or if the library
2056 #   appears in the --with-static-libs configure option.
2058 # Example:
2059 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
2060 #   of linking the dynamic variant with -ltalloc.
2062 # NOTE: This option only affects libraries that we do not only build
2063 # but that samba also links against as libraries (as opposed to linking
2064 # the plain object files. - This has to be configured in Makefile.in.
2065 # So in particular it does not harm to give invalid or unknown names here.
2068 AC_ARG_WITH([static-libs],
2069         [AS_HELP_STRING([--with-static-libs=LIBS],
2070                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
2071         [AS_IF([test $withval],
2072                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
2073                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
2074                         eval LINK_$lib=STATIC
2075                 done], [])],
2076         [])
2079 # WORKAROUND:
2080 #   until we have organized other internal subsystems (as util, registry
2081 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
2082 #   dynamically to samba programs.
2084 LINK_LIBNETAPI=STATIC
2086 LINK_LIBSMBCLIENT=STATIC
2089 #  The library versions are hardcoded here
2090 #  and filled into the LIBFOO_SOVER variable.
2092 #  TODO: for talloc and tdb (at least), these should
2093 #  be extracted from their respective source directories
2095 AC_ARG_ENABLE(external_libtalloc,
2096         [AS_HELP_STRING([--enable-external-libtalloc],
2097                 [Enable external talloc [default=auto]])],
2098         [ enable_external_libtalloc=$enableval ],
2099         [ enable_external_libtalloc=auto ])
2101 if test "x$enable_external_libtalloc" != xno
2102 then
2103         PKG_CHECK_MODULES(LIBTALLOC, talloc >= 2.0.1,
2104                 [ enable_external_libtalloc=yes ],
2105                 [ if test x$enable_external_libtalloc = xyes; then
2106                         AC_MSG_ERROR([Unable to find libtalloc])
2107                   else
2108                         enable_external_libtalloc=no
2109                   fi
2110                 ])
2113 if test "x$enable_external_libtalloc" = xno
2114 then
2115         m4_include(../lib/talloc/libtalloc.m4)
2116         if test x"$USESHARED" == x"no" ; then
2117                 LINK_LIBTALLOC=STATIC
2118         fi
2119         LIBTALLOCVERSION=`grep ^VERSION ${tallocdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
2120         SMB_LIBRARY(talloc, 2, ${LIBTALLOCVERSION})
2121         LIBTALLOC_OBJ0=""
2122         for obj in ${TALLOC_OBJ}; do
2123                 LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
2124         done
2125         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
2126         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TALLOC_CFLAGS}"
2127         AC_SUBST(LIBTALLOC_OBJ0)
2129         TALLOCTORT="bin/talloctort\$(EXEEXT)"
2130         AC_SUBST(TALLOCTORT)
2134 AC_ARG_ENABLE(external_libtdb,
2135         [AS_HELP_STRING([--enable-external-libtdb],
2136                 [Enable external tdb [default=auto]])],
2137                 [ enable_external_libtdb=$enableval ],
2138                 [ enable_external_libtdb=auto ])
2140 if test "x$enable_external_libtdb" != xno
2141 then
2142         PKG_CHECK_MODULES(LIBTDB, tdb >= 1.2.6,
2143                 [ enable_external_libtdb=yes ],
2144                 [
2145                 if test x$enable_external_libtdb = xyes; then
2146                         AC_MSG_ERROR([Unable to find libtdb])
2147                 else
2148                         enable_external_libtdb=no
2149                 fi
2150                 ])
2153 AC_SUBST(LIBTDB_OBJ0)
2154 if test "x$enable_external_libtdb" = xno
2155 then
2156         m4_include(../lib/tdb/libtdb.m4)
2157         if test x"$USESHARED" == x"no" ; then
2158                 LINK_LIBTDB=STATIC
2159         fi
2160         LIBTDBVERSION=`grep ^VERSION ${tdbdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
2161         SMB_LIBRARY(tdb, 1, ${LIBTDBVERSION})
2162         LIBTDB_OBJ0=""
2163         LIBTDB_LIBS="$LIBTDB_LIBS $TDB_DEPS"
2164         for obj in ${TDB_OBJ}; do
2165                 LIBTDB_OBJ0="${LIBTDB_OBJ0} ${tdbdir}/${obj}"
2166         done
2167         AC_SUBST(LIBTDB_OBJ0)
2168         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
2169         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TDB_CFLAGS}"
2171         TDBBACKUP="bin/tdbbackup\$(EXEEXT)"
2172         AC_SUBST(TDBBACKUP)
2173         TDBDUMP="bin/tdbdump\$(EXEEXT)"
2174         AC_SUBST(TDBDUMP)
2175         TDBRESTORE="bin/tdbrestore\$(EXEEXT)"
2176         AC_SUBST(TDBRESTORE)
2177         TDBTOOL="bin/tdbtool\$(EXEEXT)"
2178         AC_SUBST(TDBTOOL)
2179         TDBTORTURE="bin/tdbtorture\$(EXEEXT)"
2180         AC_SUBST(TDBTORTURE)
2183 SMB_LIBRARY(netapi, 0)
2184 SMB_LIBRARY(smbclient, 0)
2185 SMB_LIBRARY(smbsharemodes, 0)
2186 SMB_LIBRARY(addns, 0, [], no, [undefined API])
2190 ################
2192 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
2193 AC_TRY_RUN([#include <stdio.h>
2194 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
2195 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
2196 if test x"$samba_cv_have_longlong" = x"yes"; then
2197     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
2198     AC_CHECK_TYPE(intptr_t, unsigned long long)
2199 else
2200     AC_CHECK_TYPE(intptr_t, unsigned long)
2204 # Check if the compiler supports the LL prefix on long long integers.
2205 # AIX needs this.
2207 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
2208     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
2209         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
2210 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
2211    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
2215 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
2216 AC_TRY_RUN([#include <time.h>
2217 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
2218 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
2219 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
2220     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
2223 AC_CACHE_CHECK([for TIME_T_MAX],samba_cv_TIME_T_MAX,[
2224 AC_TRY_RUN([#include <time.h>
2225 main() {
2226         struct tm *tm;
2227         if (sizeof(time_t) == 8) {
2228                 time_t max_time = 0x7fffffffffffffffll;
2229                 tm = gmtime(&max_time);
2230                 /* This should fail with 32-bit tm_year. */
2231                 if (tm == NULL) {
2232                         /* Max time_t that works with 32-bit int tm_year in struct tm. */
2233                         max_time = 67768036191676799ll;
2234                         tm = gmtime(&max_time);
2235                         if (tm) {
2236                                 exit(0);
2237                         }
2238                 }
2239         }
2240         exit(1);
2242 samba_cv_TIME_T_MAX=yes,samba_cv_TIME_T_MAX=no,samba_cv_TIME_T_MAX=cross)])
2243 if test x"$samba_cv_TIME_T_MAX" = x"yes"; then
2244     AC_DEFINE(TIME_T_MAX,67768036191676799ll,[The maximum value of the 'time_t' type])
2248 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2249 AC_TRY_RUN([#include <stdio.h>
2250 #include <sys/stat.h>
2251 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
2252 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2253 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
2254     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
2257 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
2258 AC_TRY_RUN([
2259 #if defined(HAVE_UNISTD_H)
2260 #include <unistd.h>
2261 #endif
2262 #include <stdio.h>
2263 #include <sys/stat.h>
2264 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2265 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
2266 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
2267     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
2270 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2271 AC_TRY_RUN([
2272 #if defined(HAVE_UNISTD_H)
2273 #include <unistd.h>
2274 #endif
2275 #include <stdio.h>
2276 #include <sys/stat.h>
2277 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
2278 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2279 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2280     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2283 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
2284 AC_TRY_RUN([
2285 #if defined(HAVE_UNISTD_H)
2286 #include <unistd.h>
2287 #endif
2288 #include <stdio.h>
2289 #include <sys/stat.h>
2290 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2291 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
2292 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
2293     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
2296 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2297 AC_TRY_RUN([
2298 #if defined(HAVE_UNISTD_H)
2299 #include <unistd.h>
2300 #endif
2301 #include <stdio.h>
2302 #include <sys/stat.h>
2303 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2304 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2305 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2306     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2309 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2310 AC_TRY_RUN([
2311 #if defined(HAVE_UNISTD_H)
2312 #include <unistd.h>
2313 #endif
2314 #include <stdio.h>
2315 #include <sys/stat.h>
2316 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2317 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2318 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2319     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2322 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2323 AC_TRY_COMPILE([
2324 #if defined(HAVE_UNISTD_H)
2325 #include <unistd.h>
2326 #endif
2327 #include <sys/types.h>
2328 #include <dirent.h>],
2329 [DIR64 de;],
2330 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2331 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2332     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2335 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2336 AC_TRY_COMPILE([
2337 #if defined(HAVE_UNISTD_H)
2338 #include <unistd.h>
2339 #endif
2340 #include <sys/types.h>
2341 #include <dirent.h>],
2342 [struct dirent64 de;],
2343 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2344 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2345     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2348 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2349 AC_TRY_RUN([
2350 #if defined(HAVE_UNISTD_H)
2351 #include <unistd.h>
2352 #endif
2353 #include <sys/types.h>
2354 main() { dev_t dev; int i = major(dev); return 0; }],
2355 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2356 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2357     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2360 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2361 AC_TRY_RUN([
2362 #if defined(HAVE_UNISTD_H)
2363 #include <unistd.h>
2364 #endif
2365 #include <sys/types.h>
2366 main() { dev_t dev; int i = minor(dev); return 0; }],
2367 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2368 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2369     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2372 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2373 AC_TRY_RUN([
2374 #if defined(HAVE_UNISTD_H)
2375 #include <unistd.h>
2376 #endif
2377 #include <sys/types.h>
2378 main() { dev_t dev = makedev(1,2); return 0; }],
2379 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2380 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2381     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2384 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2385 AC_TRY_RUN([#include <stdio.h>
2386 main() { char c; c=250; exit((c > 0)?0:1); }],
2387 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2388 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2389     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2392 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2393 AC_TRY_COMPILE([#include <sys/types.h>
2394 #include <dirent.h>
2395 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2396 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2397 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2398     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2401 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2402 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2403 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2404 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2405     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2408 if test x"$libreplace_cv_HAVE_CLOCK_GETTIME_IN_LIBRT" = xyes ; then
2409         LIBS="$LIBS -lrt"
2412 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2413 AC_TRY_RUN([#include <sys/types.h>
2414 #include <dirent.h>
2415 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2416 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2417 di->d_name[0] == 0) exit(0); exit(1);} ],
2418 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2419 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2420     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2423 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2424 AC_TRY_COMPILE([#include <sys/types.h>
2425 #include <utime.h>],
2426 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2427 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2428 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2429     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2432 ##############
2433 # Check utmp details, but only if our OS offers utmp.h
2434 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2435 dnl  utmp and utmpx come in many flavours
2436 dnl  We need to check for many of them
2437 dnl  But we don't need to do each and every one, because our code uses
2438 dnl  mostly just the utmp (not utmpx) fields.
2440 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx getutxent)
2442 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2443 AC_TRY_COMPILE([#include <sys/types.h>
2444 #include <utmp.h>],
2445 [struct utmp ut;  ut.ut_name[0] = 'a';],
2446 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2447 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2448     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2451 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2452 AC_TRY_COMPILE([#include <sys/types.h>
2453 #include <utmp.h>],
2454 [struct utmp ut;  ut.ut_user[0] = 'a';],
2455 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2456 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2457     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2460 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2461 AC_TRY_COMPILE([#include <sys/types.h>
2462 #include <utmp.h>],
2463 [struct utmp ut;  ut.ut_id[0] = 'a';],
2464 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2465 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2466     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2469 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2470 AC_TRY_COMPILE([#include <sys/types.h>
2471 #include <utmp.h>],
2472 [struct utmp ut;  ut.ut_host[0] = 'a';],
2473 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2474 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2475     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2478 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2479 AC_TRY_COMPILE([#include <sys/types.h>
2480 #include <utmp.h>],
2481 [struct utmp ut;  time_t t; ut.ut_time = t;],
2482 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2483 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2484     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2487 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2488 AC_TRY_COMPILE([#include <sys/types.h>
2489 #include <utmp.h>],
2490 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2491 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2492 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2493     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2496 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2497 AC_TRY_COMPILE([#include <sys/types.h>
2498 #include <utmp.h>],
2499 [struct utmp ut;  ut.ut_type = 0;],
2500 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2501 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2502     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2505 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2506 AC_TRY_COMPILE([#include <sys/types.h>
2507 #include <utmp.h>],
2508 [struct utmp ut;  ut.ut_pid = 0;],
2509 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2510 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2511     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2514 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2515 AC_TRY_COMPILE([#include <sys/types.h>
2516 #include <utmp.h>],
2517 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2518 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2519 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2520     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2523 dnl Look for the IPv6 varient by preference. Many systems have both.
2524 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2525 AC_TRY_COMPILE([#include <sys/types.h>
2526 #include <utmp.h>],
2527 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2528 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2529 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2530     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2533 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2534 AC_TRY_COMPILE([#include <sys/types.h>
2535 #include <utmp.h>],
2536 [struct utmp ut;  ut.ut_addr = 0;],
2537 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2538 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2539     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2542 if test x$ac_cv_func_pututline = xyes ; then
2543   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2544   AC_TRY_COMPILE([#include <sys/types.h>
2545 #include <utmp.h>],
2546   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2547   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2548   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2549       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2550   fi
2553 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2554 AC_TRY_COMPILE([#include <sys/types.h>
2555 #include <utmpx.h>],
2556 [struct utmpx ux;  ux.ut_syslen = 0;],
2557 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2558 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2559     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2563 # end utmp details
2565 AC_CACHE_CHECK([for linux fallocate],samba_cv_HAVE_LINUX_FALLOCATE,[
2566 AC_TRY_COMPILE([
2567 #if defined(HAVE_UNISTD_H)
2568 #include <unistd.h>
2569 #endif
2570 #include <sys/types.h>
2571 #define _GNU_SOURCE
2572 #include <fcntl.h>
2573 #if defined(HAVE_LINUX_FALLOC_H)
2574 #include <linux/falloc.h>
2575 #endif],
2576 [int ret = fallocate(0, FALLOC_FL_KEEP_SIZE, 0, 10);],
2577 samba_cv_HAVE_LINUX_FALLOCATE=yes,samba_cv_HAVE_LINUX_FALLOCATE=no)])
2578 if test x"$samba_cv_HAVE_LINUX_FALLOCATE" = x"yes" && test x"$ac_cv_func_fallocate" = x"yes"; then
2579     AC_DEFINE(HAVE_LINUX_FALLOCATE,1,[Whether the Linux 'fallocate' function is available])
2582 AC_CACHE_CHECK([for linux fallocate64],samba_cv_HAVE_LINUX_FALLOCATE64,[
2583 AC_TRY_COMPILE([
2584 #if defined(HAVE_UNISTD_H)
2585 #include <unistd.h>
2586 #endif
2587 #include <sys/types.h>
2588 #define _GNU_SOURCE
2589 #include <fcntl.h>
2590 #if defined(HAVE_LINUX_FALLOC_H)
2591 #include <linux/falloc.h>
2592 #endif],
2593 [int ret = fallocate64(0, FALLOC_FL_KEEP_SIZE, 0, 10);],
2594 samba_cv_HAVE_LINUX_FALLOCATE64=yes,samba_cv_HAVE_LINUX_FALLOCATE64=no)])
2595 if test x"$samba_cv_HAVE_LINUX_FALLOCATE64" = x"yes" && test x"$ac_cv_func_fallocate64" = x"yes"; then
2596     AC_DEFINE(HAVE_LINUX_FALLOCATE64,1,[Whether the Linux 'fallocate64' function is available])
2599 AC_CACHE_CHECK([for getcwd takes NULL],samba_cv_GETCWD_TAKES_NULL,[
2600 AC_TRY_RUN([
2601 #if defined(HAVE_UNISTD_H)
2602 #include <unistd.h>
2603 #endif
2604 main() { char *s = getcwd(NULL,0); if (s) exit(0); exit(1); }],
2605 samba_cv_GETCWD_TAKES_NULL=yes,samba_cv_GETCWD_TAKES_NULL=no,samba_cv_GETCWD_TAKES_NULL=cross)])
2606 if test x"$samba_cv_GETCWD_TAKES_NULL" = x"yes"; then
2607     AC_DEFINE(GETCWD_TAKES_NULL,1,[Whether the getcwd function takes NULL as an argument])
2610 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2611 AC_ARG_WITH(libiconv,
2612 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2614   if test "$withval" = "no" ; then
2615     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2616   else
2617      if test "$withval" != "yes" ; then
2618         ICONV_PATH_SPEC=yes
2619         ICONV_LOOK_DIRS="$withval"
2620      fi
2621   fi
2624 for i in $ICONV_LOOK_DIRS ; do
2626     save_LIBS="$LIBS"
2627     save_LDFLAGS="$LDFLAGS"
2628     save_CPPFLAGS="$CPPFLAGS"
2630     iconv_current_LIBS=""
2631     iconv_current_LDFLAGS=""
2632     iconv_current_CPPFLAGS=""
2634     ICONV_FOUND="no"
2635     unset libext
2637     #  This is here to handle -withval stuff for --with-libiconv
2638     #  Perhaps we should always add a -L
2639     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2641     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2642     # installation paths. This gets a little tricky since we might have iconv
2643     # in both libiconv and in libc. In this case the jm_ICONV test will always
2644     # succeed when the header is found. To counter this, make sure the
2645     # library directory is there and check the ABI directory first (which
2646     # should be harmless on other systems, but causes tons of linker warnings on
2647     # 64bit Ubuntu systems).
2648     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2649     # installed, I've decided to fix the linker warnings.
2650     # -- Kai
2651     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2652     for l in "lib" "lib32" "lib/hpux32"; do
2653         if test -d "$i/$l" ; then
2654                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2655                 LIBS=
2656                 export LDFLAGS LIBS CPPFLAGS
2657                 # Try to find iconv(3)
2658                 jm_ICONV($i/$l)
2659                 if test x"$ICONV_FOUND" = "xyes" ; then
2660                     libext="$l"
2661                     break
2662                 fi
2663         fi
2664     done
2666     if test x"$ICONV_FOUND" = "xyes" ; then
2667         iconv_current_LDFLAGS="-L$i/$libext"
2668         iconv_current_CPPFLAGS="-I$i/include"
2670         if test x"$jm_cv_lib_iconv" != x; then
2671             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2672         else
2673             # We found iconv in libc.
2674             iconv_current_LIBS=""
2675         fi
2677     fi
2679     if test x"$ICONV_FOUND" = "xyes" ; then
2681         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2682         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2683         LIBS="$save_LIBS $iconv_current_LIBS"
2684         export LDFLAGS LIBS CPPFLAGS
2686         default_dos_charset=no
2687         default_unix_charset=no
2689         # check for default dos charset name
2690         for j in CP850 IBM850 ; do
2691             rjs_CHARSET($j)
2692             default_dos_charset="$ICONV_CHARSET"
2693             if test x"$default_dos_charset" = x"$j"; then
2694                 break
2695             fi
2696         done
2698         # check for default unix charset name
2699         for j in UTF-8 UTF8 ; do
2700             rjs_CHARSET($j)
2701             default_unix_charset="$ICONV_CHARSET"
2702             if test x"$default_unix_charset" = x"$j"; then
2703                 break
2704             fi
2705         done
2707         if test "$default_dos_charset" != "no" -a \
2708                 "$default_dos_charset" != "cross" -a \
2709                 "$default_unix_charset" != "no" -a \
2710                 "$default_unix_charset" != "cross"
2711         then
2712                 samba_cv_HAVE_NATIVE_ICONV=yes
2713         else
2714             if test "$default_dos_charset" = "cross" -o \
2715                      "$default_unix_charset" = "cross"
2716             then
2717                     samba_cv_HAVE_NATIVE_ICONV=cross
2718             else
2719                     samba_cv_HAVE_NATIVE_ICONV=no
2720             fi
2721         fi
2723         # At this point, we have a libiconv candidate. We know that
2724         # we have the right headers and libraries, but we don't know
2725         # whether it does the conversions we want. We can't test this
2726         # because we are cross-compiling. This is not necessarily a big
2727         # deal, since we can't guarantee that the results we get now will
2728         # match the results we get at runtime anyway.
2729         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2730             default_dos_charset="CP850"
2731             default_unix_charset="UTF-8"
2732             samba_cv_HAVE_NATIVE_ICONV=yes
2733             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2734             AC_MSG_WARN([$default_dos_charset and $default_unix_charset to UCS-16LE])
2735         fi
2737         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2739             CPPFLAGS=$save_CPPFLAGS
2740             LDFLAGS=$save_LDFLAGS
2741             LIBS=$save_LIBS
2743             if test x"$iconv_current_LIBS" != x; then
2744                 LIBS="$LIBS $iconv_current_LIBS"
2745             fi
2747             # Add the flags we need to CPPFLAGS and LDFLAGS
2748             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2749             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2751             # Turn the #defines into string literals
2752             default_dos_charset="\"$default_dos_charset\""
2753             default_unix_charset="\"$default_unix_charset\""
2755             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2756             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2757             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2759            break
2760         fi
2762     # We didn't find a working iconv, so keep going
2763     fi
2765     #  We only need to clean these up here for the next pass through the loop
2766     CPPFLAGS=$save_CPPFLAGS
2767     LDFLAGS=$save_LDFLAGS
2768     LIBS=$save_LIBS
2769     export LDFLAGS LIBS CPPFLAGS
2770 done
2771 unset libext
2774 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2775     AC_MSG_WARN([Sufficient support for iconv function was not found.
2776     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2777    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2778    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2782 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2783 AC_TRY_RUN([
2784 #include <sys/types.h>
2785 #include <fcntl.h>
2786 #ifndef F_GETLEASE
2787 #define F_GETLEASE      1025
2788 #endif
2789 main() {
2790        int fd = open("/dev/null", O_RDONLY);
2791        return fcntl(fd, F_GETLEASE, 0) == -1;
2794 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2795 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2796     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2799 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2800 AC_TRY_RUN([
2801 #include <sys/types.h>
2802 #include <fcntl.h>
2803 #include <signal.h>
2804 #ifndef F_NOTIFY
2805 #define F_NOTIFY 1026
2806 #endif
2807 main() {
2808         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2811 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2812 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2813     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2816 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2817 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h sys/inotify.h)
2818 AC_CHECK_FUNCS(inotify_init)
2819 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2821 samba_cv_HAVE_INOTIFY=yes,
2822 samba_cv_HAVE_INOTIFY=no,
2823 samba_cv_HAVE_INOTIFY=cross)
2825 if test x"$ac_cv_func_inotify_init" = x"yes"; then
2826     if test  x"$ac_cv_header_sys_inotify_h" = x"yes" -o x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2827         AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel or sys has inotify support])
2828     fi
2831 #################################################
2832 # Check if FAM notifications are available. For FAM info, see
2833 #       http://oss.sgi.com/projects/fam/
2834 #       http://savannah.nongnu.org/projects/fam/
2835 AC_ARG_ENABLE(fam,
2836 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2838 if test x$enable_fam != xno; then
2839     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2840     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2841         # On IRIX, libfam requires libC, but other FAM implementations
2842         # might not need it.
2843         AC_CHECK_LIB(fam, FAMOpen2,
2844             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam";
2845             AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2846             [samba_cv_HAVE_LIBFAM=no])
2848         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2849             samba_fam_xtra=-lC
2850             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2851                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC";
2852                 AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2853                 [samba_cv_HAVE_LIBFAM=no])
2854             unset samba_fam_xtra
2855         fi
2856     fi
2857     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2858         default_shared_modules="$default_shared_modules vfs_notify_fam"
2859         AC_TRY_COMPILE([#include <fam.h>],
2860                     [enum FAMCodes code = FAMChanged;],
2861                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2862                         [Whether fam.h contains a typedef for enum FAMCodes]),
2863                     [])
2864     fi
2866     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2867         AC_CHECK_LIB(fam, FAMNoExists,
2868             [AC_DEFINE(HAVE_FAMNOEXISTS, 1, Define to 1 if there is support for FAMNoExists)])
2869     fi
2871     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2872         AC_MSG_ERROR(FAM support requested but FAM library not available )
2873     fi
2876 AC_SUBST(SMB_FAM_LIBS)
2878 #################################################
2879 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2882 with_dmapi_support=auto
2883 AC_MSG_CHECKING(whether to use DMAPI support)
2884 AC_ARG_WITH(dmapi,
2885 [AS_HELP_STRING([--with-dmapi], [Include DMAPI/XDSM support (default=auto)])],
2886 [ case "$withval" in
2887   yes|no)
2888     with_dmapi_support=$withval
2889     ;;
2890   esac ]
2892 AC_MSG_RESULT([$with_dmapi_support])
2894 if test x"$with_dmapi_support" != xno ; then
2895         SMB_CHECK_DMAPI([], [
2896                 AC_MSG_NOTICE(DMAPI support not present)
2897                 if test x"$with_dmapi_support" = xyes ; then
2898                         AC_MSG_ERROR(no DMAPI support found but requested!)
2899                 fi
2900                 ]
2901         )
2904 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2905 # Theoretically it should work with AIX JFS2 too but this needs testing
2906 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2907     default_shared_modules="$default_shared_modules vfs_tsmsm"
2910 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2911 AC_TRY_RUN([
2912 #include <sys/types.h>
2913 #include <fcntl.h>
2914 #include <signal.h>
2915 #include <sys/file.h>
2916 #ifndef LOCK_MAND
2917 #define LOCK_MAND       32
2918 #define LOCK_READ       64
2919 #endif
2920 main() {
2921         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2924 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2925 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2926     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2930 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2931 AC_TRY_COMPILE([#include <sys/types.h>
2932 #include <fcntl.h>],
2933 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2934 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2935 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2936     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2939 #################################################
2940 # Check for POSIX capability support
2942 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2943     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2944     [], [])
2946 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2948     ac_save_LIBS=$LIBS
2949     AC_LIBTESTFUNC(cap, cap_get_proc)
2951     AC_CACHE_CHECK([for POSIX capabilities],
2952             samba_cv_HAVE_POSIX_CAPABILITIES,
2953             [
2954                 AC_TRY_RUN([
2955 #include <sys/types.h>
2956 #include <sys/capability.h>
2957 main() {
2958  cap_t cap;
2959  cap_value_t vals[1];
2960  if (!(cap = cap_get_proc()))
2961    exit(1);
2962  vals[0] = CAP_CHOWN;
2963  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2964  cap_set_proc(cap);
2965  exit(0);
2967                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2968                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2969                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2970             ])
2972 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2973     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2974             [Whether POSIX capabilities are available])
2975 else
2976     LIBS=$ac_save_LIBS
2982 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2983 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2986 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2987 AC_TRY_COMPILE([#include <sys/types.h>
2988 #if defined(HAVE_RPC_RPC_H)
2989 #include <rpc/rpc.h>
2990 #endif],
2991 [int16 testvar;],
2992 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2993 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2994     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2997 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2998 AC_TRY_COMPILE([#include <sys/types.h>
2999 #if defined(HAVE_RPC_RPC_H)
3000 #include <rpc/rpc.h>
3001 #endif],
3002 [uint16 testvar;],
3003 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
3004 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
3005     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
3008 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
3009 AC_TRY_COMPILE([#include <sys/types.h>
3010 #if defined(HAVE_RPC_RPC_H)
3011 #include <rpc/rpc.h>
3012 #endif],
3013 [int32 testvar;],
3014 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
3015 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
3016     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
3019 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
3020 AC_TRY_COMPILE([#include <sys/types.h>
3021 #if defined(HAVE_RPC_RPC_H)
3022 #include <rpc/rpc.h>
3023 #endif],
3024 [uint32 testvar;],
3025 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
3026 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
3027     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
3031 dnl Some systems (SCO) have a problem including
3032 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
3033 dnl as a #define in <prot.h> and as part of an enum
3034 dnl in <rpc/rpc.h>.
3037 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
3038 AC_TRY_COMPILE([#include <sys/types.h>
3039 #ifdef HAVE_SYS_SECURITY_H
3040 #include <sys/security.h>
3041 #include <prot.h>
3042 #endif  /* HAVE_SYS_SECURITY_H */
3043 #if defined(HAVE_RPC_RPC_H)
3044 #include <rpc/rpc.h>
3045 #endif],
3046 [int testvar;],
3047 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
3048 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
3049     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
3052 AC_MSG_CHECKING([for test routines])
3053 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
3054            AC_MSG_RESULT(yes),
3055            AC_MSG_ERROR([cant find test code. Aborting config]),
3056            AC_MSG_WARN([cannot run when cross-compiling]))
3058 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
3059 AC_TRY_RUN([#include "${srcdir-.}/../tests/ftruncate.c"],
3060            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
3061 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
3062     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
3065 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
3066 AC_TRY_RUN([#include "${srcdir-.}/../tests/getgroups.c"],
3067            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
3068 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
3069     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
3072 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
3073 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
3074 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
3075 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
3076 AC_CHECK_FUNCS(getpagesize)
3078 ################################################
3079 # look for a method of setting the effective uid
3080 seteuid=no;
3082 if test $seteuid = no; then
3083 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
3084 AC_TRY_RUN([
3085 #define AUTOCONF_TEST 1
3086 #define USE_SETREUID 1
3087 #include "confdefs.h"
3088 #include "${srcdir-.}/lib/util_sec.c"],
3089            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
3090 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
3091     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
3095 # we check for setresuid second as it conflicts with AIO on Linux. 
3096 # see http://samba.org/~tridge/junkcode/aio_uid.c
3097 if test $seteuid = no; then
3098 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
3099 AC_TRY_RUN([
3100 #define AUTOCONF_TEST 1
3101 #define USE_SETRESUID 1
3102 #include "confdefs.h"
3103 #include "${srcdir-.}/lib/util_sec.c"],
3104            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
3105 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
3106     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
3110 if test $seteuid = no; then
3111 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
3112 AC_TRY_RUN([
3113 #define AUTOCONF_TEST 1
3114 #define USE_SETEUID 1
3115 #include "confdefs.h"
3116 #include "${srcdir-.}/lib/util_sec.c"],
3117            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
3118 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
3119     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
3123 if test $seteuid = no; then
3124 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
3125 AC_TRY_RUN([
3126 #define AUTOCONF_TEST 1
3127 #define USE_SETUIDX 1
3128 #include "confdefs.h"
3129 #include "${srcdir-.}/lib/util_sec.c"],
3130            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
3131 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
3132     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
3136 AC_CACHE_CHECK([for the Darwin initgroups system call],
3137         samba_cv_DARWIN_INITGROUPS,
3138         AC_TRY_LINK([
3139 #include <sys/syscall.h>
3140 #include <unistd.h>
3141         ],
3142         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
3143         samba_cv_DARWIN_INITGROUPS=yes,
3144         samba_cv_DARWIN_INITGROUPS=no)
3147 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
3148     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
3149         [Whether to use the Darwin-specific initgroups system call])
3152 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
3153 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock.c"],
3154            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
3155 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
3156     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
3159 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
3160 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock64.c"],
3161            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
3162 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
3163     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
3165 else
3168 dnl Don't check for 64 bit fcntl locking if we know that the
3169 dnl glibc2.1 broken check has succeeded.
3172   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
3173   AC_TRY_RUN([
3174 #if defined(HAVE_UNISTD_H)
3175 #include <unistd.h>
3176 #endif
3177 #include <stdio.h>
3178 #include <stdlib.h>
3180 #ifdef HAVE_FCNTL_H
3181 #include <fcntl.h>
3182 #endif
3184 #ifdef HAVE_SYS_FCNTL_H
3185 #include <sys/fcntl.h>
3186 #endif
3187 main() { struct flock64 fl64;
3188 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
3189 exit(0);
3190 #else
3191 exit(1);
3192 #endif
3194        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
3196   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
3197       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
3198   fi
3201 # glibc up to 2.3.6 had dangerously broken posix_fallocate(). DON'T USE IT.
3202 AC_CACHE_CHECK([for broken posix_fallocate],samba_cv_HAVE_BROKEN_POSIX_FALLOCATE,[
3203 AC_TRY_COMPILE([
3204   #define _XOPEN_SOURCE 600
3205   #include <stdlib.h>
3206   #if defined(__GLIBC__) && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4))
3207     probably broken posix_fallocate
3208   #endif
3209 ], [
3210 ], 
3211 samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=no,samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=yes)])
3212 if test x"$samba_cv_HAVE_BROKEN_POSIX_FALLOCATE" = xyes; then
3213         AC_DEFINE(HAVE_BROKEN_POSIX_FALLOCATE,, Whether we have a broken posix_fallocate)
3217 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
3218 AC_TRY_COMPILE([#include <sys/types.h>
3219 #include <sys/stat.h>
3220 #include <unistd.h>],
3221 [struct stat st;  st.st_blocks = 0;],
3222 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
3223 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
3224     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
3227 AC_CHECK_TYPES([blksize_t, blkcnt_t], [], [], [[#include <sys/stat.h>]])
3229 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
3230 AC_TRY_COMPILE([#include <sys/types.h>
3231 #include <sys/stat.h>
3232 #include <unistd.h>],
3233 [struct stat st;  st.st_blksize = 0;],
3234 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
3235 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
3236     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
3239 AC_CACHE_CHECK([for st_flags in struct stat],
3240         samba_cv_HAVE_STAT_ST_FLAGS,
3241         [
3242             AC_TRY_COMPILE([#include <sys/types.h>
3243 #include <sys/stat.h>
3244 #include <unistd.h>],
3245             [struct stat st;  st.st_flags = 0;],
3246             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3247             samba_cv_HAVE_STAT_ST_FLAGS=no,
3248             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3249         ])
3251 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3252     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3253                 [Whether the stat struct has a st_flags member])
3256 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3257 AC_TRY_COMPILE([
3258 #include <sys/types.h>
3259 #include <sys/acl.h>
3260 #if defined(HAVE_RPCSVC_NIS_H)
3261 #include <rpcsvc/nis.h>
3262 #endif],
3263 [int i;],
3264 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3265 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3266         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3269 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3270 AC_TRY_RUN([
3271 #include <stdio.h>
3272 #include <limits.h>
3273 #include <signal.h>
3275 void exit_on_core(int ignored) {
3276         exit(1);
3279 main() {
3280         char *newpath;
3281         signal(SIGSEGV, exit_on_core);
3282         newpath = realpath("/tmp", NULL);
3283         exit((newpath != NULL) ? 0 : 1);
3286 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3287 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3288     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3291 #################################################
3292 # check for AFS clear-text auth support
3293 samba_cv_WITH_AFS=no
3294 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3295 AC_ARG_WITH(afs,
3296 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
3297 [ case "$withval" in
3298   yes|auto)
3299     AC_MSG_RESULT($withval)
3300     samba_cv_WITH_AFS=$withval
3301     ;;
3302   *)
3303     AC_MSG_RESULT(no)
3304     ;;
3305   esac ],
3306   AC_MSG_RESULT(no)
3309 ####################################################
3310 # check for Linux-specific AFS fake-kaserver support
3311 samba_cv_WITH_FAKE_KASERVER=no
3312 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3313 AC_ARG_WITH(fake-kaserver,
3314 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
3315 [ case "$withval" in
3316   yes|auto)
3317     AC_MSG_RESULT($withval)
3318     samba_cv_WITH_FAKE_KASERVER=$withval
3319     ;;
3320   *)
3321     AC_MSG_RESULT(no)
3322     ;;
3323   esac ],
3324   AC_MSG_RESULT(no)
3327 #################################################
3328 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3329 if test x"$samba_cv_WITH_AFS" != x"no" ||
3330    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3332     # see if this box has the OpenSSL DES libraries
3333     AC_CHECK_LIB( crypto, DES_pcbc_encrypt, LIBS="$LIBS -lcrypto" , [AC_ERROR(OpenSSL library: libcrypto ot found!)] )
3335     # see if this box has the afs-headers in /usr/include/afs
3336     AC_MSG_CHECKING(for /usr/include/afs)
3337     if test -d /usr/include/afs; then
3338           AC_MSG_RESULT(yes)
3339     else
3340       AC_MSG_RESULT(no)
3341     fi
3343     # check for afs.h
3344     have_afs_headers=no
3345     AC_CHECK_HEADERS(afs.h afs/afs.h)
3346     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3347         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3348            test x"$samba_cv_WITH_AFS" = x"auto"; then
3349                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3350         else
3351                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3352         fi
3353     else
3354         have_afs_headers=yes
3355     fi
3358 FAKE_KASERVER_OBJ=""
3359 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3360     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3361     FAKE_KASERVER_OBJ="utils/net_afs.o"
3363 AC_SUBST(FAKE_KASERVER_OBJ)
3365 #################################################
3366 # check whether to compile AFS/NT ACL mapping module
3367 samba_cv_WITH_VFS_AFSACL=no
3368 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3369 AC_ARG_WITH(vfs-afsacl,
3370 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
3371 [ case "$withval" in
3372   yes|auto)
3373     AC_MSG_RESULT($withval)
3374     samba_cv_WITH_VFS_AFSACL=yes
3375     ;;
3376   *)
3377     AC_MSG_RESULT(no)
3378     ;;
3379   esac ],
3380   AC_MSG_RESULT(no)
3383 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3384    default_shared_modules="$default_shared_modules vfs_afsacl"
3386         
3387 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3388     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3391 #################################################
3392 # check for the DFS clear-text auth system
3393 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3394 AC_ARG_WITH(dfs,
3395 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3396 [ case "$withval" in
3397   yes)
3398     AC_MSG_RESULT(yes)
3399     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3400     ;;
3401   *)
3402     AC_MSG_RESULT(no)
3403     ;;
3404   esac ],
3405   AC_MSG_RESULT(no)
3408 ########################################################
3409 # Compile with LDAP support?
3411 with_ldap_support=auto
3412 AC_MSG_CHECKING([for LDAP support])
3414 AC_ARG_WITH(ldap,
3415 [AS_HELP_STRING([--with-ldap], [LDAP support (default=auto)])],
3416 [ case "$withval" in
3417     yes|no)
3418         with_ldap_support=$withval
3419         ;;
3420   esac ])
3422 AC_MSG_RESULT($with_ldap_support)
3424 SMBLDAP=""
3425 AC_SUBST(SMBLDAP)
3427 if test x"$with_ldap_support" != x"no"; then
3429   ##################################################################
3430   # first test for ldap.h and lber.h
3431   # (ldap.h is required for this test)
3432   AC_CHECK_HEADERS(ldap.h lber.h)
3434   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3435         if test x"$with_ldap_support" = x"yes"; then
3436          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3437         else
3438          AC_MSG_WARN(ldap.h is needed for LDAP support)
3439         fi
3440         
3441         with_ldap_support=no
3442   fi
3444   ##################################################################
3445   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3446   # unsigned int in include/includes.h
3447   case $host_os in
3448         *hpux*)
3449          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3450          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3451         with_ldap_support=yes
3452         ;;
3453         *)
3454         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3455         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3456                 if test x"$with_ldap_support" = x"yes"; then
3457                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3458                 else
3459                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3460                 fi
3461                 with_ldap_support=no
3462         fi
3463         ;;
3464   esac
3467 if test x"$with_ldap_support" != x"no"; then
3468   ac_save_LIBS=$LIBS
3470   ##################################################################
3471   # we might need the lber lib on some systems. To avoid link errors
3472   # this test must be before the libldap test
3473   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3475   ########################################################
3476   # If ber_sockbuf_add_io() is available we can add
3477   # SASL wrapping hooks
3478   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3480   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3481                  AC_TRY_COMPILE([#include <ldap.h>],
3482                                 [int val = LDAP_OPT_SOCKBUF;],
3483                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3484                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3486   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3487           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3488         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3489   fi
3491   #######################################################
3492   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3493   # ldap logging and print it out in the samba logs
3494   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3495                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3496                  [AC_TRY_COMPILE([#include <lber.h>],
3497                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3498                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3499                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3501   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3502         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3503                   [Support for LDAP/LBER logging interception])
3504   fi
3506   ########################################################
3507   # now see if we can find the ldap libs in standard paths
3508   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3510   ########################################################
3511   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3512   # Check found in pam_ldap 145.
3513   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3515   LIBS="$LIBS $LDAP_LIBS"
3516   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3517     AC_TRY_COMPILE([
3518         #include <lber.h>
3519         #include <ldap.h>],
3520         [ldap_set_rebind_proc(0, 0, 0);],
3521         [smb_ldap_cv_ldap_set_rebind_proc=3],
3522         [smb_ldap_cv_ldap_set_rebind_proc=2]
3523     )
3524   ])
3526   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3528   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3530   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3531     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3532     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3533     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3534     default_shared_modules="$default_shared_modules";
3535     SMBLDAP="lib/smbldap.o"
3536     with_ldap_support=yes
3537     AC_MSG_CHECKING(whether LDAP support is used)
3538     AC_MSG_RESULT(yes)
3539   else
3540     if test x"$with_ldap_support" = x"yes"; then
3541         AC_MSG_ERROR(libldap is needed for LDAP support)
3542     else
3543         AC_MSG_WARN(libldap is needed for LDAP support)
3544     fi
3546     LDAP_LIBS=""
3547     with_ldap_support=no
3548   fi
3549   LIBS=$ac_save_LIBS
3553 #################################################
3554 # active directory support
3556 with_ads_support=auto
3557 AC_MSG_CHECKING([for Active Directory and krb5 support])
3559 AC_ARG_WITH(ads,
3560 [AS_HELP_STRING([--with-ads], [Active Directory support (default=auto)])],
3561 [ case "$withval" in
3562     yes|no)
3563         with_ads_support="$withval"
3564         ;;
3565   esac ])
3567 AC_MSG_RESULT($with_ads_support)
3569 FOUND_KRB5=no
3570 KRB5_LIBS=""
3572 if test x"$with_ldap_support" != x"yes"; then
3574     if test x"$with_ads_support" = x"yes"; then
3575         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3576     elif test x"$with_ads_support" = x"auto"; then
3577         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3578         with_ads_support=no
3579     fi
3581 else
3583     # Check to see whether there is enough LDAP functionality to be able
3584     # to build AD support.
3586 # HPUX and Solaris only has ldap_init; ok, we take care of this in smbldap.c
3587 case "$host_os" in
3588         *hpux* | *solaris*)
3589     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3591     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3592         if test x"$with_ads_support" = x"yes"; then
3593             AC_MSG_ERROR(Active Directory support on HPUX or Solaris requires ldap_init)
3594         elif test x"$with_ads_support" = x"auto"; then
3595             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX or Solaris))
3596             with_ads_support=no
3597         fi
3598     fi
3599     ;;
3600         *)
3601     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3603     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3604         if test x"$with_ads_support" = x"yes"; then
3605             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3606         elif test x"$with_ads_support" = x"auto"; then
3607             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3608             with_ads_support=no
3609         fi
3610     fi
3611     ;;
3612 esac
3615     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3617     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3618         if test x"$with_ads_support" = x"yes"; then
3619             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3620         elif test x"$with_ads_support" = x"auto"; then
3621             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3622             with_ads_support=no
3623         fi
3624     fi
3628 if test x"$with_ads_support" != x"no"; then
3630   # Do no harm to the values of CFLAGS and LIBS while testing for
3631   # Kerberos support.
3633   if test x$FOUND_KRB5 = x"no"; then
3634     #################################################
3635     # check for location of Kerberos 5 install
3636     AC_MSG_CHECKING(for kerberos 5 install path)
3637     AC_ARG_WITH(krb5,
3638     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3639     [ case "$withval" in
3640       no)
3641         AC_MSG_RESULT(no krb5-path given)
3642         ;;
3643       yes)
3644         AC_MSG_RESULT(/usr)
3645         ;;
3646       *)
3647         AC_MSG_RESULT($withval)
3648         KRB5_CFLAGS="-I$withval/include"
3649         KRB5_CPPFLAGS="-I$withval/include"
3650         KRB5_LDFLAGS="-L$withval/lib"
3651         FOUND_KRB5=yes
3652         if test -x "$withval/bin/krb5-config"; then
3653                 KRB5CONFIG=$withval/bin/krb5-config
3654         fi
3655         ;;
3656       esac ],
3657       AC_MSG_RESULT(no krb5-path given)
3658     )
3659   fi
3661   #################################################
3662   # check for krb5-config from recent MIT and Heimdal kerberos 5
3663   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3664   AC_MSG_CHECKING(for working krb5-config)
3665   if test -x "$KRB5CONFIG" && $KRB5CONFIG --libs gssapi > /dev/null ; then
3666     ac_save_CFLAGS=$CFLAGS
3667     CFLAGS="";export CFLAGS
3668     ac_save_LDFLAGS=$LDFLAGS
3669     LDFLAGS="";export LDFLAGS
3670     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3671     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3672     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3673     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3674     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3675     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3676     FOUND_KRB5=yes
3677     AC_MSG_RESULT(yes)
3678   else
3679     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3680   fi
3682   if test x$FOUND_KRB5 = x"no"; then
3683     #################################################
3684     # see if this box has the SuSE location for the heimdal krb implementation
3685     AC_MSG_CHECKING(for /usr/include/heimdal)
3686     if test -d /usr/include/heimdal; then
3687       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3688           KRB5_CFLAGS="-I/usr/include/heimdal"
3689           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3690           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3691           FOUND_KRB5=yes
3692           AC_MSG_RESULT(yes)
3693       else
3694           KRB5_CFLAGS="-I/usr/include/heimdal"
3695           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3696           FOUND_KRB5=yes
3697           AC_MSG_RESULT(yes)
3698       fi
3699     else
3700       AC_MSG_RESULT(no)
3701     fi
3702   fi
3704   if test x$FOUND_KRB5 = x"no"; then
3705     #################################################
3706     # see if this box has the RedHat location for kerberos
3707     AC_MSG_CHECKING(for /usr/kerberos)
3708     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3709       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3710       KRB5_CFLAGS="-I/usr/kerberos/include"
3711       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3712       FOUND_KRB5=yes
3713       AC_MSG_RESULT(yes)
3714     else
3715       AC_MSG_RESULT(no)
3716     fi
3717   fi
3719   if test x$FOUND_KRB5 = x"no"; then
3720     #################################################
3721     # see if this box has the OpenBSD location for heimdal krb5
3722     AC_MSG_CHECKING(for /usr/include/kerberosV)
3723     if test -d /usr/include/kerberosV; then
3724       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3725       KRB5_LIBS="-lcrypto"
3726       FOUND_KRB5=yes
3727       AC_MSG_RESULT(yes)
3728     else
3729       AC_MSG_RESULT(no)
3730     fi
3731   fi
3733   if test x$FOUND_KRB5 = x"no"; then
3734     #################################################
3735     # see if this box has Solaris MIT kerberos implementation
3736     AC_MSG_CHECKING(for Solaris MIT kerberos)
3737     if test -x "$KRB5CONFIG" && $KRB5CONFIG --version | grep -s Solaris | grep -s MIT > /dev/null ; then
3738        FOUND_KRB5=yes
3739        KRB5_LIBS="-lgss -lkrb5"
3740        KRB5_CFLAGS="`$KRB5CONFIG --cflags`"
3741        KRB5_CPPFLAGS="`$KRB5CONFIG --cflags`"
3742        AC_MSG_RESULT(yes)
3743     else
3744       AC_MSG_RESULT(no)
3745     fi
3746   fi
3748   ac_save_CFLAGS=$CFLAGS
3749   ac_save_CPPFLAGS=$CPPFLAGS
3750   ac_save_LDFLAGS=$LDFLAGS
3752   # remove needless evil rpath stuff as early as possible:
3753   LIB_REMOVE_USR_LIB(KRB5_LIBS)
3754   LIB_REMOVE_USR_LIB(KRB5_LDFLAGS)
3755   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3756   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3757   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3759   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3761   # now check for krb5.h. Some systems have the libraries without the headers!
3762   # note that this check is done here to allow for different kerberos
3763   # include paths
3764   AC_CHECK_HEADERS(krb5.h)
3766   if test x"$ac_cv_header_krb5_h" = x"no"; then
3768     # Give a warning if AD support was not explicitly requested,
3769     # i.e with_ads_support = auto, otherwise die with an error.
3771     if test x"$with_ads_support" = x"yes"; then
3772       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3773     else
3774       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3775     fi
3777     # Turn off AD support and restore CFLAGS and LIBS variables
3779     with_ads_support="no"
3781     CFLAGS=$ac_save_CFLAGS
3782     CPPFLAGS=$ac_save_CPPFLAGS
3783     LDFLAGS=$ac_save_LDFLAGS
3784   fi
3786   # check for new heimdal KRB5_DEPRECATED handling
3788   AC_CACHE_CHECK([for KRB5_DEPRECATED define taking an identifier],
3789                 samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER,[
3790     AC_TRY_COMPILE(
3791       [#define KRB5_DEPRECATED 1
3792       #include <krb5.h>],
3793       [],
3794       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=yes,
3795       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=no)])
3797   if test x"$samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER" = x"yes"; then
3798     AC_DEFINE(HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER, 1,
3799                [Whether to use deprecated krb5 interfaces])
3800   fi
3803 # Now we have determined whether we really want ADS support
3804 use_ads=no
3805 if test x"$with_ads_support" != x"no"; then
3806   use_ads=yes
3807   have_gssapi=no
3808   ac_save_LIBS=$LIBS
3810   # now check for gssapi headers.  This is also done here to allow for
3811   # different kerberos include paths
3812   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h gssapi/gssapi_ext.h gssapi/gssapi_krb5.h com_err.h)
3814   ##################################################################
3815   # we might need the k5crypto and com_err libraries on some systems
3816   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3817   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3819   # Heimdal checks.
3820   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3821   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3822   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3824   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3825   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3827   ########################################################
3828   # now see if we can find the krb5 libs in standard paths
3829   # or as specified above
3830   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3831   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3833   ########################################################
3834   # now see if we can find the gssapi libs in standard paths
3835   if test x"$have_gssapi" != x"yes"; then
3836      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3837      AC_CHECK_LIB_EXT(gss, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3838      AC_CHECK_FUNC_EXT(gss_wrap_iov, $KRB5_LIBS)
3839   fi
3841   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3842   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3843   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3844   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3845   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3846   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3847   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3848   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3849   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3850   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3851   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3852   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3853   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3854   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3855   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3856   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3857   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3858   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3859   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3860   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3861   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3862   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3863   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3864   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3865   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3866   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3867   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3868   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3869   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3870   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3871   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3872   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3873   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3874   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3875   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3876   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3877   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3878   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3879   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3880   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3881   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3882   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3883   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3884   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_alloc, $KRB5_LIBS)
3885   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_set_impersonate, $KRB5_LIBS)
3886   AC_CHECK_FUNC_EXT(krb5_get_creds, $KRB5_LIBS)
3887   AC_CHECK_FUNC_EXT(krb5_get_credentials_for_user, $KRB5_LIBS)
3888   AC_CHECK_FUNC_EXT(krb5_get_host_realm, $KRB5_LIBS)
3889   AC_CHECK_FUNC_EXT(krb5_free_host_realm, $KRB5_LIBS)
3890   AC_CHECK_FUNC_EXT(gss_krb5_import_cred, $KRB5_LIBS)
3891   AC_CHECK_FUNC_EXT(gss_get_name_attribute, $KRB5_LIBS)
3892   AC_CHECK_FUNC_EXT(gss_mech_krb5, $KRB5_LIBS)
3893   AC_CHECK_FUNC_EXT(gss_oid_equal, $KRB5_LIBS)
3894   AC_CHECK_FUNC_EXT(gss_inquire_sec_context_by_oid, $KRB5_LIBS)
3896   # This is for FreeBSD (and possibly others). gss_mech_krb5 is a
3897   # #define to GSS_KRB5_MECHANISM, which is defined in -lgssapi_krb5
3898   AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS, GSS_KRB5_MECHANISM,
3899                    [KRB5_LIBS="$KRB5_LIBS -lgssapi_krb5"])
3901   # MIT krb5 1.8 does not expose this call (yet)
3902   AC_CHECK_DECLS(krb5_get_credentials_for_user, [], [], [#include <krb5.h>])
3904   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3905   # but does have the symbol
3906   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3908   LIBS="$KRB5_LIBS $LIBS"
3910   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3911         smb_krb5_cv_ticket_has_keyinfo,
3912         [
3913             AC_TRY_COMPILE(
3914             [
3915                 #include <krb5.h>
3916             ],
3917             [
3918                 krb5_ticket ticket;
3919                 krb5_kvno kvno;
3920                 krb5_enctype enctype;
3922                 enctype = ticket.enc_part.enctype;
3923                 kvno = ticket.enc_part.kvno;
3924             ],
3925             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3926             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3927         ])
3929   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3930         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3931             [Whether the krb5_ticket structure contains the kvno and enctype])
3932   fi
3934   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3935           smb_krb5_cv_creds_opt_free_context,
3936           [
3937                 AC_TRY_COMPILE([
3938                     #include <krb5.h>],
3939                     [
3940                         krb5_context ctx;
3941                         krb5_get_init_creds_opt *opt = NULL;
3942                         krb5_get_init_creds_opt_free(ctx, opt);
3943                     ],
3944                     [smb_krb5_cv_creds_opt_free_context=yes],
3945                     [smb_krb5_cv_creds_opt_free_context=no]
3946                 )
3947           ])
3949   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3950         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3951             [Whether krb5_get_init_creds_opt_free takes a context argument])
3952   fi
3954   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3955     AC_TRY_COMPILE([
3956         #include <krb5.h>],
3957         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3958         [smb_krb5_cv_verify_checksum=7],
3959         [smb_krb5_cv_verify_checksum=6],
3960     )
3961   ])
3962   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3964   AC_CACHE_CHECK([for checksum in krb5_checksum],
3965                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3966     AC_TRY_COMPILE([#include <krb5.h>],
3967       [krb5_checksum cksum; cksum.checksum.length = 0;],
3968       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3969       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3971   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3972     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3973                [Whether the krb5_checksum struct has a checksum property])
3974   fi
3976   AC_CACHE_CHECK([for etype in EncryptedData],
3977                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3978     AC_TRY_COMPILE([#include <krb5.h>],
3979       [EncryptedData edata; edata.etype = 0;],
3980       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3981       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3983   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3984     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3985                [Whether the EncryptedData struct has a etype property])
3986   fi
3988   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3989                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3990     AC_TRY_COMPILE([#include <krb5.h>],
3991       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3992       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3993       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3995   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3996     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3997                [Whether the krb5_ap_req struct has a ticket pointer])
3998   fi
4000   AC_CACHE_CHECK([for e_data pointer in krb5_error],
4001                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
4002     AC_TRY_COMPILE([#include <krb5.h>],
4003       [krb5_error err; err.e_data = NULL;],
4004       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
4005       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
4007   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
4008     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
4009                [Whether the krb5_error struct has a e_data pointer])
4010   fi
4012   AC_CACHE_CHECK([for krb5_crypto type],
4013                 samba_cv_HAVE_KRB5_CRYPTO,[
4014     AC_TRY_COMPILE([#include <krb5.h>],
4015       [krb5_crypto crypto;],
4016       samba_cv_HAVE_KRB5_CRYPTO=yes,
4017       samba_cv_HAVE_KRB5_CRYPTO=no)])
4019   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
4020     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
4021                [Whether the type krb5_crypto exists])
4022   fi
4024   AC_CACHE_CHECK([for krb5_encrypt_block type],
4025                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
4026     AC_TRY_COMPILE([#include <krb5.h>],
4027       [krb5_encrypt_block block;],
4028       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
4029       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
4031   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
4032     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
4033                [Whether the type krb5_encrypt_block exists])
4034   fi
4036   AC_CACHE_CHECK([for addrtype in krb5_address],
4037                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
4038     AC_TRY_COMPILE([#include <krb5.h>],
4039       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
4040       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
4041       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
4043   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
4044     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
4045                [Whether the krb5_address struct has a addrtype property])
4046   fi
4048   AC_CACHE_CHECK([for addr_type in krb5_address],
4049                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
4050     AC_TRY_COMPILE([#include <krb5.h>],
4051       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
4052       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
4053       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
4055   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
4056     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
4057               [Whether the krb5_address struct has a addr_type property])
4058   fi
4060   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
4061                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
4062                  [AC_TRY_COMPILE([#include <krb5.h>],
4063     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
4064     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
4066   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
4067     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
4068               [Whether the krb5_ticket struct has a enc_part2 property])
4069   fi
4071   AC_CACHE_CHECK([for keyblock in krb5_creds],
4072                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
4073     AC_TRY_COMPILE([#include <krb5.h>],
4074       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
4075       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
4076       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
4078   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
4079     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
4080               [Whether the krb5_creds struct has a keyblock property])
4081   fi
4083   AC_CACHE_CHECK([for session in krb5_creds],
4084                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
4085     AC_TRY_COMPILE([#include <krb5.h>],
4086       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
4087       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
4088       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
4090   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
4091     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
4092               [Whether the krb5_creds struct has a session property])
4093   fi
4095   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
4096                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
4097     AC_TRY_COMPILE([#include <krb5.h>],
4098       [krb5_keyblock key; key.keyvalue.data = NULL;],
4099       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
4100       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
4102   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
4103     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
4104               [Whether the krb5_keyblock struct has a keyvalue property])
4105   fi
4107   found_arcfour_hmac=no
4108   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
4109                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
4110     AC_TRY_COMPILE([#include <krb5.h>],
4111       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
4112       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
4113       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
4114   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
4115                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
4116     AC_TRY_COMPILE([#include <krb5.h>],
4117       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
4118       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
4119       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
4120 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
4121 # w.r.t. arcfour and windows, so we must not enable it here
4122   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
4123           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
4124     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
4125               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type definition is available])
4126     found_arcfour_hmac=yes
4127   fi
4128   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC],
4129                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC,[
4130     AC_TRY_COMPILE([#include <krb5.h>],
4131       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC;],
4132       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=yes,
4133       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=no)])
4134   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC" = x"yes"; then
4135     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC,1,
4136               [Whether the ENCTYPE_ARCFOUR_HMAC key type definition is available])
4137     found_arcfour_hmac=yes
4138   fi
4140   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
4141                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
4142     AC_TRY_COMPILE([#include <krb5.h>],
4143       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
4144       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
4145       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
4147   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
4148     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
4149               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
4150   fi
4152   AC_CACHE_CHECK([for KV5M_KEYTAB],
4153                  samba_cv_HAVE_KV5M_KEYTAB,[
4154     AC_TRY_COMPILE([#include <krb5.h>],
4155       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
4156       samba_cv_HAVE_KV5M_KEYTAB=yes,
4157       samba_cv_HAVE_KV5M_KEYTAB=no)])
4159   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
4160       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
4161              [Whether the KV5M_KEYTAB option is available])
4162   fi
4164   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
4165                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
4166     AC_TRY_COMPILE([#include <krb5.h>],
4167       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
4168       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
4169       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
4171   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
4172     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
4173               [Whether KRB5_KU_OTHER_CKSUM is available])
4174   fi
4176   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
4177                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
4178     AC_TRY_COMPILE([#include <krb5.h>],
4179       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
4180       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
4181       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
4183   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
4184     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
4185               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
4186   fi
4188   AC_CACHE_CHECK([for the krb5_princ_component macro],
4189                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
4190     AC_TRY_LINK([#include <krb5.h>],
4191       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
4192       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
4193       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
4195   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
4196     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
4197                [Whether krb5_princ_component is available])
4198   fi
4200   AC_CACHE_CHECK([for key in krb5_keytab_entry],
4201                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
4202     AC_TRY_COMPILE([#include <krb5.h>],
4203       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
4204       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
4205       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
4207   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
4208     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
4209               [Whether krb5_keytab_entry has key member])
4210   fi
4212   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
4213                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
4214     AC_TRY_COMPILE([#include <krb5.h>],
4215       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
4216       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
4217       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
4219   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
4220     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
4221               [Whether krb5_keytab_entry has keyblock member])
4222   fi
4224   AC_CACHE_CHECK([for magic in krb5_address],
4225                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
4226     AC_TRY_COMPILE([#include <krb5.h>],
4227       [krb5_address addr; addr.magic = 0;],
4228       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
4229       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
4231   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
4232     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
4233               [Whether the krb5_address struct has a magic property])
4234   fi
4236   AC_CACHE_CHECK([for WRFILE: keytab support],
4237                 samba_cv_HAVE_WRFILE_KEYTAB,[
4238     AC_TRY_RUN([
4239 #include<krb5.h>
4240   main()
4241   {
4242     krb5_context context;
4243     krb5_keytab keytab;
4245     krb5_init_context(&context);
4246     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
4247   }],
4248   samba_cv_HAVE_WRFILE_KEYTAB=yes,
4249   samba_cv_HAVE_WRFILE_KEYTAB=no)])
4251   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
4252       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
4253                [Whether the WRFILE:-keytab is supported])
4254   fi
4256   AC_CACHE_CHECK([for krb5_realm type],
4257                 samba_cv_HAVE_KRB5_REALM_TYPE,[
4258     AC_TRY_COMPILE([#include <krb5.h>],
4259       [krb5_realm realm;],
4260       samba_cv_HAVE_KRB5_REALM_TYPE=yes,
4261       samba_cv_HAVE_KRB5_REALM_TYPE=no)])
4263   if test x"$samba_cv_HAVE_KRB5_REALM_TYPE" = x"yes"; then
4264     AC_DEFINE(HAVE_KRB5_REALM_TYPE,1,
4265                [Whether the type krb5_realm exists])
4266   fi
4268   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
4269                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
4270     AC_TRY_COMPILE([#include <krb5.h>],
4271     [
4272     krb5_context context;
4273     krb5_principal principal;
4274     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
4275     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
4276     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
4278   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
4279     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
4280               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
4281   fi
4283   AC_CACHE_CHECK([for krb5_addresses type],
4284                 samba_cv_HAVE_KRB5_ADDRESSES,[
4285     AC_TRY_COMPILE([#include <krb5.h>],
4286       [krb5_addresses addr;],
4287       samba_cv_HAVE_KRB5_ADDRESSES=yes,
4288       samba_cv_HAVE_KRB5_ADDRESSES=no)])
4290   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
4291     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
4292                [Whether the type krb5_addresses type exists])
4293   fi
4295   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
4296                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
4297     AC_TRY_COMPILE([#include <krb5.h>],
4298     [
4299     krb5_mk_error(0,0,0);],
4300     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
4301     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
4303   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
4304     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
4305               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
4306   fi
4308   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
4309     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
4310         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
4311         AC_TRY_RUN_STRICT([
4312                 #include <stdlib.h>
4313                 #include <krb5.h>
4314                 int main(void) {
4315                         krb5_context context = NULL;
4316                         char *str = NULL;
4317                         krb5_enctype_to_string(context, 1, &str);
4318                         if (str) free (str); 
4319                         return 0;
4320                 }
4321                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4322                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
4323                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
4325     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4326       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4327                 [whether krb5_enctype_to_string takes krb5_context argument])
4328     fi
4330     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4331         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
4332         AC_TRY_RUN_STRICT([
4333                 #include <krb5.h>
4334                 int main(void) {
4335                         char buf[256];
4336                         krb5_enctype_to_string(1, buf, 256);
4337                         return 0;
4338                 }
4339                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4340                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
4341                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
4343     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
4344       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4345                 [whether krb5_enctype_to_string takes size_t argument])
4346     fi
4347   fi
4349   AC_CACHE_CHECK([for krb5_principal_get_realm],
4350                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4351     AC_TRY_LINK([#include <krb5.h>],
4352       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4353       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4354       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4356   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4357     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4358                [Whether the function krb5_principal_get_realm is defined])
4359   fi
4361   AC_CACHE_CHECK([for krb5_princ_realm],
4362                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4363     AC_TRY_LINK([#include <krb5.h>],
4364       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
4365       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
4366       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
4368   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
4369     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
4370                [Whether the macro krb5_princ_realm is defined])
4371   fi
4373   AC_HAVE_DECL(KRB5_PDU_NONE,[#include <krb5.h>])
4375   #
4376   #
4377   # Now the decisions whether we can support krb5
4378   #
4379   # NOTE: all tests should be done before this block!
4380   #
4381   #
4382   if test x"$found_arcfour_hmac" != x"yes"; then
4383     AC_MSG_WARN(arcfour-hmac-md5 encryption type not found in -lkrb5)
4384     use_ads=no
4385   fi
4387   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4388     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4389     use_ads=no
4390   fi
4392   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
4393           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
4394   then
4395     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4396     use_ads=no
4397   fi
4399   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4400           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4401   then
4402     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4403     use_ads=no
4404   fi
4406   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4407           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4408   then
4409     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4410     use_ads=no
4411   fi
4413   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
4414           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
4415   then
4416     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
4417     use_ads=no
4418   fi
4420   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
4422       # We only need the following functions if we can't get the enctype
4423       # and kvno out of the ticket directly (ie. on Heimdal).
4425       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
4426       then
4427         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
4428         use_ads=no
4429       fi
4431       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
4432       then
4433         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
4434         use_ads=no
4435       fi
4437   fi
4439   if test x"$use_ads" = x"yes"; then
4440     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4441     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4442     if test x"$have_gssapi" = x"yes"; then
4443       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
4444     fi
4445   else
4446     if test x"$with_ads_support" = x"yes"; then
4447         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4448     else
4449         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4450     fi
4451     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4452     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4453     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4454     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4455     KRB5_LIBS=""
4456     with_ads_support=no
4457   fi
4458   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4459   AC_MSG_RESULT([$use_ads])
4461 LIBS="$ac_save_LIBS"
4464 if test x"$use_ads" != xyes; then
4465         smbtorture4_possible=no
4468 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4469 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4472 ########################################################
4473 # Compile with DNS Updates support?
4475 with_dnsupdate_support=auto
4476 AC_MSG_CHECKING([whether to enable DNS Updates support])
4478 AC_ARG_WITH(dnsupdate,
4479 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default=auto)])],
4480 [ case "$withval" in
4481     yes|no)
4482         with_dnsupdate_support=$withval
4483         ;;
4484   esac ])
4486 AC_MSG_RESULT($with_dnsupdate_support)
4488 if test x"$with_dnsupdate_support" != x"no"; then
4490   ################################################################
4491   # first test for AD / GSSAPI support being enabled
4492         if test x"$have_gssapi" != xyes ; then
4493                 if test x"$with_dnsupdate_support" = x"yes" ; then
4494                         AC_MSG_ERROR(DNS Updates support only possible with AD and GSSAPI support)
4495                 else
4496                         AC_MSG_NOTICE(DNS Updates support only possible with AD and GSSAPI support)
4497                         with_dnsupdate_support=no
4498                 fi
4499         fi
4500   ##################################################################
4501   # then test for uuid.h (necessary to generate unique DNS keynames
4502   # (uuid.h is required for this test)
4503         AC_CHECK_HEADERS(uuid/uuid.h)
4505         
4506         if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4507                 if test x"$with_dnsupdate_support" = x"yes"; then
4508                         AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4509                 else
4510                         AC_MSG_NOTICE(uuid.h is needed to enable DNS Updates support)
4511                 fi
4512                 with_dnsupdate_support=no
4513         fi
4516 if test x"$with_dnsupdate_support" != x"no"; then
4518   ########################################################
4519   # Now see if we can find the uuid libs in standard paths
4520   # On some systems, the uuid API is in libc, so we have to
4521   # be careful not to insert a spurious -luuid.
4523   UUID_LIBS=""
4524   AC_LIBTESTFUNC(uuid, uuid_generate,
4525           [
4526             case " $LIBS " in
4527                 *\ -luuid\ *)
4528                 UUID_LIBS="-luuid"
4529                 SMB_REMOVE_LIB(uuid)
4530                 ;;
4531             esac
4533             with_dnsupdate_support=yes
4534             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4535         ],
4536         [
4537             if test x"$with_dnsupdate_support" = x"yes"; then
4538                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4539             else
4540                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4541             fi
4542             with_dnsupdate_support=no
4543         ])
4545   # finally print out the result:
4546 AC_MSG_CHECKING(whether DNS Updates support is used)
4547 AC_MSG_RESULT([$with_dnsupdate_support])
4550 #################################################
4551 # check for automount support
4552 AC_MSG_CHECKING(whether to use automount)
4553 AC_ARG_WITH(automount,
4554 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4555 [ case "$withval" in
4556   yes)
4557     AC_MSG_RESULT(yes)
4558     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4559     ;;
4560   *)
4561     AC_MSG_RESULT(no)
4562     ;;
4563   esac ],
4564   AC_MSG_RESULT(no)
4567 #################################################
4568 # Check for a PAM clear-text auth, accounts, password
4569 # and session support. Most PAM implementations keep their
4570 # headers in /usr/include/security. Darwin keeps its in
4571 # /usr/include/pam.
4573 with_pam_for_crypt=no
4574 try_pam=auto
4575 AC_MSG_CHECKING(whether to try PAM support)
4576 AC_ARG_WITH(pam,
4577 [AS_HELP_STRING([--with-pam], [Include PAM support (default=auto)])],
4578 [ case "$withval" in
4579   yes|no|auto)
4580     try_pam=$withval
4581     ;;
4582   esac
4584 AC_MSG_RESULT([$try_pam])
4586 use_pam=no
4587 create_pam_modules=no
4588 if test x"${try_pam}" != x"no";then
4589         use_pam=yes
4590         create_pam_modules=yes
4592         # Most systems have PAM headers in /usr/include/security, but Darwin
4593         # has them in /usr/include/pam.
4594         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4595         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4596                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4597                 if test x"${try_pam}" = x"yes";then
4598                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4599                 fi
4600                 use_pam=no
4601                 create_pam_modules=no
4602         fi
4604         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4605         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4606                 if test x"${try_pam}" = x"yes";then
4607                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4608                 fi
4609                 use_pam=no
4610                 create_pam_modules=no
4611         fi
4613         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4614                 #if HAVE_SECURITY_PAM_APPL_H
4615                 #include <security/pam_appl.h>
4616                 #endif
4617                 #if HAVE_PAM_PAM_APPL_H
4618                 #include <pam/pam_appl.h>
4619                 #endif
4620         ]])
4621         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4622                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4623                 if test x"${try_pam}" = x"yes";then
4624                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4625        fi
4626                 create_pam_modules=no
4627     fi
4629         if test x"$use_pam" = x"yes"; then
4630     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4631                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4632                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4633     with_pam_for_crypt=yes
4635                 if test x"$create_pam_modules" = x"yes"; then
4636                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4637                         # this checks are optional,
4638                         # we don't care about the results here
4639                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4640                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4641                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4642                 else
4643                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4644                 fi
4645         fi
4646         AC_MSG_CHECKING(whether to use PAM support)
4647         AC_MSG_RESULT([$use_pam])
4649         AC_MSG_CHECKING(whether to have PAM MODULES support)
4650         AC_MSG_RESULT([$create_pam_modules])
4652         AC_TRY_COMPILE([
4653                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4654                 #include <security/pam_appl.h>
4655                 #elif defined(HAVE_PAM_PAM_APPL_H)
4656                 #include <pam/pam_appl.h>
4657                 #endif],[
4658                 pam_set_item(0, PAM_RHOST, 0);
4659                 ],
4660                 AC_DEFINE(HAVE_PAM_RHOST, 1,
4661                           [Define to 1 if PAM_RHOST is available]),[])
4663         AC_TRY_COMPILE([
4664                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4665                 #include <security/pam_appl.h>
4666                 #elif defined(HAVE_PAM_PAM_APPL_H)
4667                 #include <pam/pam_appl.h>
4668                 #endif],[
4669                 pam_set_item(0, PAM_TTY, 0);
4670                 ],
4671                 AC_DEFINE(HAVE_PAM_TTY, 1,
4672                           [Define to 1 if PAM_TTY is available]),[])
4674 fi # try_pam != no
4676 #################################################
4677 # check for PAM_RADIO_TYPE
4678 AC_TRY_COMPILE([
4679 #if (!defined(LINUX))
4681 #define PAM_EXTERN extern
4682 #if defined(HAVE_SECURITY_PAM_APPL_H)
4683 #include <security/pam_appl.h>
4684 #elif defined(HAVE_PAM_PAM_APPL_H)
4685 #include <pam/pam_appl.h>
4686 #endif
4688 #endif
4690 #if defined(HAVE_SECURITY_PAM_MODULES_H)
4691 #include <security/pam_modules.h>
4692 #elif defined(HAVE_PAM_PAM_MODULES_H)
4693 #include <pam/pam_modules.h>
4694 #endif
4696 #if defined(HAVE_SECURITY__PAM_MACROS_H)
4697 #include <security/_pam_macros.h>
4698 #elif defined(HAVE_PAM__PAM_MACROS_H)
4699 #include <pam/_pam_macros.h>
4700 #endif
4702 #ifdef HAVE_SECURITY_PAM_EXT_H
4703 #include <security/pam_ext.h>
4704 #endif
4706 [int i; i = PAM_RADIO_TYPE; ],
4707 AC_DEFINE(HAVE_PAM_RADIO_TYPE, 1, [Define to 1 if PAM_RADIO_TYPE is available]),[])
4709 #################################################
4710 # check for pam_smbpass support
4711 PAM_MODULES=""
4712 INSTALL_PAM_MODULES=""
4713 UNINSTALL_PAM_MODULES=""
4715 try_pam_smbpass=auto
4716 AC_MSG_CHECKING(whether to use pam_smbpass)
4717 AC_ARG_WITH(pam_smbpass,
4718 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=auto)])],
4719 [ case "$withval" in
4720   yes|no|auto)
4721     try_pam_smbpass=$withval
4722   ;;
4723   *)
4724     AC_MSG_ERROR([valid options are yes,no,auto])
4725   ;;
4726   esac
4729 if test x"${try_pam_smbpass}" = xno ; then
4730         use_pam_smbpass=no
4731 else
4732         use_pam_smbpass=yes
4733         # Conditions under which pam_smbpass can't be built.
4734         if test x"$BLDSHARED" != xtrue ; then
4735                 if test x"${try_pam_smbpass}" = xyes ; then
4736                         AC_MSG_ERROR([No support for shared modules])
4737                 fi
4738                 use_pam_smbpass=no
4739         elif test x"$create_pam_modules" != xyes ; then
4740                 if test x"${try_pam_smbpass}" = xyes ; then
4741                         AC_MSG_ERROR([No support for PAM MODULES])
4742                 fi
4743                 use_pam_smbpass=no
4744         fi
4746         if test x"${use_pam_smbpass}" = xyes ; then 
4747                 PAM_MODULES="pam_smbpass"
4748                 INSTALL_PAM_MODULES="installpammodules"
4749                 UNINSTALL_PAM_MODULES="uninstallpammodules"
4750         fi
4752 AC_MSG_RESULT([$use_pam_smbpass])
4756 ## moved after the check for -lcrypt in order to
4757 ## ensure that the necessary libraries are included
4758 ## check checking for truncated salt.  Wrapped by the
4759 ## $with_pam_for_crypt variable as above   --jerry
4761 if test $with_pam_for_crypt = no; then
4762 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4763 crypt_LIBS="$LIBS"
4764 LIBS="$AUTH_LIBS $LIBS"
4765 AC_TRY_RUN([#include "${srcdir-.}/../tests/crypttest.c"],
4766         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4767 LIBS="$crypt_LIBS"])
4768 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4769         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4773 #################################################
4774 # check for a NISPLUS_HOME support
4775 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4776 AC_ARG_WITH(nisplus-home,
4777 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4778 [ case "$withval" in
4779   yes)
4780     AC_MSG_RESULT(yes)
4781     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4782     ;;
4783   *)
4784     AC_MSG_RESULT(no)
4785     ;;
4786   esac ],
4787   AC_MSG_RESULT(no)
4790 #################################################
4791 # check for syslog logging
4792 AC_MSG_CHECKING(whether to use syslog logging)
4793 AC_ARG_WITH(syslog,
4794 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4795 [ case "$withval" in
4796   yes)
4797     AC_MSG_RESULT(yes)
4798     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4799     ;;
4800   *)
4801     AC_MSG_RESULT(no)
4802     ;;
4803   esac ],
4804   AC_MSG_RESULT(no)
4807 #################################################
4808 # check for custom syslog facility
4809 AC_MSG_CHECKING(whether to use a custom syslog facility)
4810 AC_ARG_WITH(syslog-facility,
4811 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4813   if test "$withval" = "no" ; then
4814     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4815   else
4816      if test "$withval" != "yes" ; then
4817         syslog_facility="$withval"
4818         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4819      fi
4820   fi
4823 #################################################
4824 # check for experimental disk-quotas support
4826 samba_cv_WITH_QUOTAS=auto
4827 samba_cv_TRY_QUOTAS=no
4828 samba_cv_RUN_QUOTA_TESTS=auto
4829 samba_cv_WITH_SYS_QUOTAS=auto
4830 samba_cv_TRY_SYS_QUOTAS=auto
4831 samba_cv_SYSQUOTA_FOUND=no
4833 AC_MSG_CHECKING(whether to try disk-quotas support)
4834 AC_ARG_WITH(quotas,
4835 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4836 [ case "$withval" in
4837   yes)
4838     AC_MSG_RESULT(yes)
4839     samba_cv_WITH_QUOTAS=yes
4840     samba_cv_TRY_QUOTAS=yes
4841     samba_cv_RUN_QUOTA_TESTS=yes
4842     #set sys quotas to auto in this case
4843     samba_cv_TRY_SYS_QUOTAS=auto
4844     ;;
4845   auto)
4846     AC_MSG_RESULT(auto)
4847     samba_cv_WITH_QUOTAS=auto
4848     samba_cv_TRY_QUOTAS=auto
4849     samba_cv_RUN_QUOTA_TESTS=auto
4850     #set sys quotas to auto in this case
4851     samba_cv_TRY_SYS_QUOTAS=auto
4852     ;;
4853   no)
4854     AC_MSG_RESULT(no)
4855     samba_cv_WITH_QUOTAS=no
4856     samba_cv_TRY_QUOTAS=no
4857     samba_cv_RUN_QUOTA_TESTS=no
4858     ;;
4859   *)
4860     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4861     ;;
4862   esac ],
4863   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4866 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4867 AC_ARG_WITH(sys-quotas,
4868 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4869 [ case "$withval" in
4870   yes)
4871     AC_MSG_RESULT(yes)
4872     samba_cv_WITH_SYS_QUOTAS=yes
4873     samba_cv_TRY_SYS_QUOTAS=yes
4874     samba_cv_RUN_QUOTA_TESTS=yes
4875     ;;
4876   auto)
4877     AC_MSG_RESULT(auto)
4878     samba_cv_WITH_SYS_QUOTAS=auto
4879     samba_cv_TRY_SYS_QUOTAS=auto
4880     samba_cv_RUN_QUOTA_TESTS=auto
4881     ;;
4882   no)
4883     AC_MSG_RESULT(no)
4884     samba_cv_WITH_SYS_QUOTAS=no
4885     samba_cv_TRY_SYS_QUOTAS=no
4886     ;;
4887   *)
4888     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4889     ;;
4890   esac ],
4891   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4894 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4895 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4896   case "$host_os" in
4897         *linux*)
4898             AC_MSG_RESULT(yes)
4899             samba_cv_TRY_SYS_QUOTAS=yes
4900             samba_cv_RUN_QUOTA_TESTS=yes
4901             ;;
4902         *)
4903             AC_MSG_RESULT(no)
4904             samba_cv_TRY_SYS_QUOTAS=no
4905             ;;
4906   esac
4909 #############################################
4910 # only check for quota stuff if --with-quotas
4911 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4913 case "$host_os" in
4914         # on linux we didn't need to test we have builtin support
4915         *linux*)
4916             samba_cv_SYSQUOTA_FOUND=yes
4917             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4918             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4919             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4920             AC_MSG_RESULT(yes)
4922             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4923             samba_cv_found_xfs_header=yes
4924             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4925             AC_MSG_RESULT(yes)
4926             ;;
4927         *solaris*)
4928             # need to set this define when using static linking (BUG 1473)
4929             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4930             ;;
4931         *)
4932             ;;
4933 esac
4935 # some broken header files need this
4936 AC_CHECK_HEADER(asm/types.h,[
4937             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4938             AC_ADD_INCLUDE(<asm/types.h>)
4939             ])
4941 # For quotas on Veritas VxFS filesystems
4942 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4944 # For quotas on Linux XFS filesystems
4945 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4947 # For sys/quota.h and linux/quota.h
4948 AC_CHECK_HEADERS(sys/quota.h)
4950 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4951 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4952 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4953 AC_TRY_COMPILE([
4954 #include "confdefs.h"
4955 #ifdef HAVE_SYS_TYPES_H
4956 #include <sys/types.h>
4957 #endif
4958 #ifdef HAVE_ASM_TYPES_H
4959 #include <asm/types.h>
4960 #endif
4961 #include <sys/quota.h>
4962 ],[int i = Q_XGETQUOTA;],
4963 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4964 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4965         samba_cv_found_xfs_header=yes
4969 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4970 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4971 AC_TRY_COMPILE([
4972 #include "confdefs.h"
4973 #ifdef HAVE_SYS_QUOTA_H
4974 #include <sys/quota.h>
4975 #endif
4977 struct dqblk D;
4978 D.dqb_fsoftlimit = 0;],
4979 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4980 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4981         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4984 ##################
4985 # look for a working quota system
4987 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4988 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4989 AC_TRY_RUN_STRICT([
4990 #define HAVE_QUOTACTL_4A 1
4991 #define AUTOCONF_TEST 1
4992 #include "confdefs.h"
4993 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4994            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4995 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4996     samba_cv_SYSQUOTA_FOUND=yes;
4997     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4998     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
5002 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
5003 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
5004 AC_TRY_RUN_STRICT([
5005 #define HAVE_QUOTACTL_4B 1
5006 #define AUTOCONF_TEST 1
5007 #include "confdefs.h"
5008 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
5009            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
5010 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
5011     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
5012     samba_cv_SYSQUOTA_FOUND=yes;
5013     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
5014     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
5018 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
5019 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
5020 AC_TRY_RUN_STRICT([
5021 #define HAVE_QUOTACTL_3 1
5022 #define AUTOCONF_TEST 1
5023 #include "confdefs.h"
5024 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
5025            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
5026 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
5027     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
5028     samba_cv_SYSQUOTA_FOUND=yes;
5029     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
5030     samba_cv_sysquotas_file="lib/sysquotas_3.c"
5034 #################################################
5035 # check for mntent.h and struct mntent
5036 AC_CHECK_HEADERS(mntent.h)
5037 #################################################
5038 # check for setmntent,getmntent,endmntent
5039 AC_CHECK_FUNCS(setmntent getmntent endmntent)
5041 #################################################
5042 # check for devnm.h and struct mntent
5043 AC_CHECK_HEADERS(devnm.h)
5044 #################################################
5045 # check for devnm
5046 AC_CHECK_FUNCS(devnm)
5048 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
5049     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
5050         # if --with-sys-quotas=yes then build it
5051         # you have can use the get/set quota command smb.conf
5052         # options then
5053         samba_cv_SYSQUOTA_FOUND=auto
5054     fi
5055     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
5056         # if --with-sys-quotas=yes then build it
5057         # you have can use the get/set quota command smb.conf
5058         # options then
5059         samba_cv_TRY_SYS_QUOTAS=auto
5060     fi
5063 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
5064 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
5065 SAVE_CPPFLAGS="$CPPFLAGS"
5066 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5067 AC_TRY_COMPILE([
5068 #include "confdefs.h"
5069 #define NO_PROTO_H 1
5070 #define NO_CONFIG_H 1
5071 #define HAVE_SYS_QUOTAS 1
5072 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
5073 #include "${srcdir-.}/lib/sysquotas.c"
5074 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
5075 CPPFLAGS="$SAVE_CPPFLAGS"
5077 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
5078 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
5079     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
5080         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
5081         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
5082         samba_cv_WE_USE_SYS_QUOTAS=yes
5083         AC_MSG_RESULT(yes)
5084     else
5085         AC_MSG_RESULT(no)
5086     fi
5090 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
5091 AC_CACHE_CHECK([whether the sys_quota interface works with NFS],samba_cv_SYSQUOTA_WORKS_NFS,[
5092 SAVE_CPPFLAGS="$CPPFLAGS"
5093 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5094 AC_TRY_COMPILE([
5095 #include "confdefs.h"
5096 #define NO_PROTO_H 1
5097 #define NO_CONFIG_H 1
5098 #define HAVE_SYS_QUOTAS 1
5099 #define HAVE_NFS_QUOTAS 1
5100 #include "${srcdir-.}/lib/sysquotas_nfs.c"
5101 ],[],samba_cv_SYSQUOTA_WORKS_NFS=yes,samba_cv_SYSQUOTA_WORKS_NFS=no)
5102 CPPFLAGS="$SAVE_CPPFLAGS"
5104 if test x"$samba_cv_SYSQUOTA_WORKS_NFS" = x"yes"; then
5105     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
5106         AC_DEFINE(HAVE_NFS_QUOTAS,1,[Whether nfs quota support is available])
5107     fi
5111 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
5112 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
5113 SAVE_CPPFLAGS="$CPPFLAGS"
5114 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5115 AC_TRY_COMPILE([
5116 #include "confdefs.h"
5117 #define NO_PROTO_H 1
5118 #define NO_CONFIG_H 1
5119 #define HAVE_SYS_QUOTAS 1
5120 #define HAVE_XFS_QUOTAS 1
5121 #include "${srcdir-.}/lib/sysquotas_xfs.c"
5122 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
5123 CPPFLAGS="$SAVE_CPPFLAGS"
5125 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
5126     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
5127         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
5128     fi
5132 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
5133 SAVE_CPPFLAGS="$CPPFLAGS"
5134 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5135 AC_TRY_COMPILE([
5136 #include "confdefs.h"
5137 #define NO_PROTO_H 1
5138 #define NO_CONFIG_H 1
5139 #include "${srcdir-.}/smbd/quotas.c"
5140 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
5141 CPPFLAGS="$SAVE_CPPFLAGS"
5143 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
5144 AC_MSG_CHECKING(whether to use the old quota support)
5145     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
5146       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
5147         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
5148         AC_MSG_RESULT(yes)
5149       else
5150         AC_MSG_RESULT(no)
5151       fi
5152     else
5153       AC_MSG_RESULT(no)
5154     fi
5157 ####################
5158 # End of quota check samba_cv_RUN_QUOTA_TESTS
5161 #################################################
5162 # check for experimental utmp accounting
5164 AC_MSG_CHECKING(whether to support utmp accounting)
5165 WITH_UTMP=yes
5166 AC_ARG_WITH(utmp,
5167 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
5168 [ case "$withval" in
5169   no)
5170                 WITH_UTMP=no
5171                 ;;
5172   *)
5173                 WITH_UTMP=yes
5174                 ;;
5175   esac ],
5178 # utmp requires utmp.h
5179 # Note similar check earlier, when checking utmp details.
5181 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
5182         utmp_no_reason=", no utmp.h on $host_os"
5183         WITH_UTMP=no
5186 # Display test results
5188 if test x"$WITH_UTMP" = x"yes"; then
5189         AC_MSG_RESULT(yes)
5190         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
5191 else
5192         AC_MSG_RESULT(no$utmp_no_reason)
5196 #################################################
5197 # these tests are taken from the GNU fileutils package
5198 AC_CHECKING(how to get filesystem space usage)
5199 space=no
5201 # Test for statvfs64.
5202 if test $space = no; then
5203   # SVR4
5204   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
5205   [AC_TRY_RUN([
5206 #if defined(HAVE_UNISTD_H)
5207 #include <unistd.h>
5208 #endif
5209 #include <sys/types.h>
5210 #include <sys/statvfs.h>
5211   main ()
5212   {
5213     struct statvfs64 fsd;
5214     exit (statvfs64 (".", &fsd));
5215   }],
5216   fu_cv_sys_stat_statvfs64=yes,
5217   fu_cv_sys_stat_statvfs64=no,
5218   fu_cv_sys_stat_statvfs64=cross)])
5219   if test $fu_cv_sys_stat_statvfs64 = yes; then
5220     space=yes
5221     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
5222   fi
5225 # Perform only the link test since it seems there are no variants of the
5226 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
5227 # because that got a false positive on SCO OSR5.  Adding the declaration
5228 # of a `struct statvfs' causes this test to fail (as it should) on such
5229 # systems.  That system is reported to work fine with STAT_STATFS4 which
5230 # is what it gets when this test fails.
5231 if test $space = no; then
5232   # SVR4
5233   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
5234                  [AC_TRY_LINK([#include <sys/types.h>
5235 #include <sys/statvfs.h>],
5236                               [struct statvfs fsd; statvfs (0, &fsd);],
5237                               fu_cv_sys_stat_statvfs=yes,
5238                               fu_cv_sys_stat_statvfs=no)])
5239   if test $fu_cv_sys_stat_statvfs = yes; then
5240     space=yes
5241     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
5242   fi
5245 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
5246 # This is not the case on ancient Linux systems.
5248 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
5249     AC_TRY_COMPILE([#include <sys/types.h>
5250 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
5251         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
5252 if test x"$samba_cv_fsid_int" = x"yes"; then
5253     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
5256 # fsusage.c assumes that statvfs has an f_frsize entry. Some weird
5257 # systems use f_bsize.
5258 AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [
5259     AC_TRY_COMPILE([#include <sys/types.h>
5260 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0],
5261         samba_cv_frsize=yes,samba_cv_frsize=no)])
5262 if test x"$samba_cv_frsize" = x"yes"; then
5263     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
5266 # Some systems use f_flag in struct statvfs while others use f_flags
5267 AC_CACHE_CHECK([that statvfs.statvfs_f_flag works],samba_cv_statvfs_f_flag, [
5268     AC_TRY_COMPILE([#include <sys/types.h>
5269 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flag = 0],
5270         samba_cv_statvfs_f_flag=yes,samba_cv_statvfs_f_flag=no)])
5271 if test x"$samba_cv_statvfs_f_flag" = x"yes"; then
5272     AC_DEFINE(HAVE_STATVFS_F_FLAG, 1, [Whether statvfs.f_flag exists])
5275 AC_CACHE_CHECK([that statvfs.statvfs_f_flags works],samba_cv_statvfs_f_flags, [
5276     AC_TRY_COMPILE([#include <sys/types.h>
5277 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flags = 0],
5278         samba_cv_statvfs_f_flags=yes,samba_cv_statvfs_f_flags=no)])
5279 if test x"$samba_cv_statvfs_f_flags" = x"yes"; then
5280     AC_DEFINE(HAVE_STATVFS_F_FLAGS, 1, [Whether statvfs.f_flags exists])
5283 if test $space = no; then
5284   # DEC Alpha running OSF/1
5285   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
5286   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
5287   [AC_TRY_RUN([
5288 #include <sys/param.h>
5289 #include <sys/types.h>
5290 #include <sys/mount.h>
5291   main ()
5292   {
5293     struct statfs fsd;
5294     fsd.f_fsize = 0;
5295     exit (statfs (".", &fsd, sizeof (struct statfs)));
5296   }],
5297   fu_cv_sys_stat_statfs3_osf1=yes,
5298   fu_cv_sys_stat_statfs3_osf1=no,
5299   fu_cv_sys_stat_statfs3_osf1=no)])
5300   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5301   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5302     space=yes
5303     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5304   fi
5307 if test $space = no; then
5308 # AIX
5309   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5310 member (AIX, 4.3BSD)])
5311   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5312   [AC_TRY_RUN([
5313 #ifdef HAVE_SYS_PARAM_H
5314 #include <sys/param.h>
5315 #endif
5316 #ifdef HAVE_SYS_MOUNT_H
5317 #include <sys/mount.h>
5318 #endif
5319 #ifdef HAVE_SYS_VFS_H
5320 #include <sys/vfs.h>
5321 #endif
5322   main ()
5323   {
5324   struct statfs fsd;
5325   fsd.f_bsize = 0;
5326   exit (statfs (".", &fsd));
5327   }],
5328   fu_cv_sys_stat_statfs2_bsize=yes,
5329   fu_cv_sys_stat_statfs2_bsize=no,
5330   fu_cv_sys_stat_statfs2_bsize=no)])
5331   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5332   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5333     space=yes
5334     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5335   fi
5338 if test $space = no; then
5339 # SVR3
5340   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5341   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5342   [AC_TRY_RUN([#include <sys/types.h>
5343 #include <sys/statfs.h>
5344   main ()
5345   {
5346   struct statfs fsd;
5347   exit (statfs (".", &fsd, sizeof fsd, 0));
5348   }],
5349     fu_cv_sys_stat_statfs4=yes,
5350     fu_cv_sys_stat_statfs4=no,
5351     fu_cv_sys_stat_statfs4=no)])
5352   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5353   if test $fu_cv_sys_stat_statfs4 = yes; then
5354     space=yes
5355     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5356   fi
5359 if test $space = no; then
5360 # 4.4BSD and NetBSD
5361   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5362 member (4.4BSD and NetBSD)])
5363   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5364   [AC_TRY_RUN([#include <sys/types.h>
5365 #ifdef HAVE_SYS_PARAM_H
5366 #include <sys/param.h>
5367 #endif
5368 #ifdef HAVE_SYS_MOUNT_H
5369 #include <sys/mount.h>
5370 #endif
5371   main ()
5372   {
5373   struct statfs fsd;
5374   fsd.f_fsize = 0;
5375   exit (statfs (".", &fsd));
5376   }],
5377   fu_cv_sys_stat_statfs2_fsize=yes,
5378   fu_cv_sys_stat_statfs2_fsize=no,
5379   fu_cv_sys_stat_statfs2_fsize=no)])
5380   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5381   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5382     space=yes
5383         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5384   fi
5387 if test $space = no; then
5388   # Ultrix
5389   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5390   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5391   [AC_TRY_RUN([#include <sys/types.h>
5392 #ifdef HAVE_SYS_PARAM_H
5393 #include <sys/param.h>
5394 #endif
5395 #ifdef HAVE_SYS_MOUNT_H
5396 #include <sys/mount.h>
5397 #endif
5398 #ifdef HAVE_SYS_FS_TYPES_H
5399 #include <sys/fs_types.h>
5400 #endif
5401   main ()
5402   {
5403   struct fs_data fsd;
5404   /* Ultrix's statfs returns 1 for success,
5405      0 for not mounted, -1 for failure.  */
5406   exit (statfs (".", &fsd) != 1);
5407   }],
5408   fu_cv_sys_stat_fs_data=yes,
5409   fu_cv_sys_stat_fs_data=no,
5410   fu_cv_sys_stat_fs_data=no)])
5411   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5412   if test $fu_cv_sys_stat_fs_data = yes; then
5413     space=yes
5414     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5415   fi
5419 # As a gating factor for large file support, in order to
5420 # use <4GB files we must have the following minimal support
5421 # available.
5422 # long long, and a 64 bit off_t or off64_t.
5423 # If we don't have all of these then disable large
5424 # file support.
5426 AC_MSG_CHECKING([if large file support can be enabled])
5427 AC_TRY_COMPILE([
5428 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5429 #include <sys/types.h>
5430 #else
5431 __COMPILE_ERROR_
5432 #endif
5434 [int i],
5435 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5436 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5437         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5439 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5442 #################################################
5443 # check for cluster extensions
5445 AC_MSG_CHECKING(cluster support)
5446 AC_ARG_WITH(cluster-support,
5447 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
5449 if test x"$with_cluster_support" = x ; then
5450         with_cluster_support="auto"
5453 AC_MSG_RESULT($with_cluster_support)
5455 AC_ARG_WITH(ctdb,
5456 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
5457 [ case "$withval" in
5458   yes|no)
5459     AC_MSG_WARN([--with-ctdb called without argument])
5460     ;;
5461   *)
5462     CTDB_CPPFLAGS="-I$withval/include"
5463     ;;
5464   esac])
5466 AC_ARG_ENABLE(old-ctdb,
5467         [AS_HELP_STRING([--enable-old-ctdb],
5468                 [Enable build against (too) old ctdb version (default=no)])],,
5469                 [enable_old_ctdb=no])
5472 if test "$with_cluster_support" != "no" ; then
5474 AC_MSG_NOTICE(checking whether cluster support is available)
5476 have_cluster_support="yes"
5477 ctdb_broken="no"
5479 SAVED_CPPFLAGS="$CPPFLAGS"
5480 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS} $CTDB_CPPFLAGS"
5482 AC_CHECK_HEADERS(ctdb.h ctdb_private.h,,,[
5483 #include "confdefs.h"
5484 #define NO_CONFIG_H
5485 #include "replace.h"
5486 #include "system/wait.h"
5487 #include "system/network.h"
5488 #define private #error __USED_RESERVED_WORD_private__
5489 #include <talloc.h>
5490 #include <tdb.h>
5491 #include <ctdb.h>
5494 if test "x$have_cluster_support" = "xyes" -a \
5495         "x$ac_cv_header_ctdb_h" != "xyes"
5496 then
5497         have_cluster_support=no
5498         ctdb_broken="ctdb.h is required for cluster support"
5501 if test "x$have_cluster_support" = "xyes" -a \
5502         "x$ac_cv_header_ctdb_h" != "xyes"
5503 then
5504         have_cluster_support=no
5505         ctdb_broken="ctdb_private.h is required for cluster support"
5509 if test "x$have_cluster_support" = "xyes" ; then
5510         AC_HAVE_DECL(CTDB_CONTROL_TRANS3_COMMIT,[
5511         #include "confdefs.h"
5512         #define NO_CONFIG_H
5513         #include "replace.h"
5514         #include "system/wait.h"
5515         #include "system/network.h"
5516         #include <talloc.h>
5517         #include <tdb.h>
5518         #include <ctdb.h>
5519         #include <ctdb_private.h>
5520         ])
5521         if test x"$ac_cv_have_CTDB_CONTROL_TRANS3_COMMIT_decl" != x"yes"; then
5522                 ctdb_broken="ctdb transaction support missing or too old"
5523                 have_cluster_support=no
5524         fi
5527 if test "x$have_cluster_support" = "xyes" ; then
5528         AC_HAVE_DECL(CTDB_CONTROL_SCHEDULE_FOR_DELETION,[
5529         #include "confdefs.h"
5530         #define NO_CONFIG_H
5531         #include "replace.h"
5532         #include "system/wait.h"
5533         #include "system/network.h"
5534         #include <talloc.h>
5535         #include <tdb.h>
5536         #include <ctdb.h>
5537         #include <ctdb_private.h>
5538         ])
5539         if test x"$ac_cv_have_CTDB_CONTROL_SCHEDULE_FOR_DELETION_decl" != x"yes"
5540         then
5541                 if test "x$enable_old_ctdb" = "xyes" ; then
5542                         AC_MSG_WARN([ignoring missing SCHEDULE_FOR_DELETION (--enable-old-ctdb)])
5543                 else
5544                         ctdb_broken="support for SCHEDULE_FOR_DELETION control missing"
5545                         have_cluster_support=no
5546                 fi
5547         fi
5550 if test "x$have_cluster_support" = "xyes" ; then
5551         AC_HAVE_DECL(CTDB_CONTROL_CHECK_SRVIDS,[
5552         #include "confdefs.h"
5553         #define NO_CONFIG_H
5554         #include "replace.h"
5555         #include "system/wait.h"
5556         #include "system/network.h"
5557         #include <talloc.h>
5558         #include <tdb.h>
5559         #include <ctdb.h>
5560         #include <ctdb_private.h>
5561         ])
5562         if test x"$ac_cv_have_CTDB_CONTROL_CHECK_SRVIDS_decl" != x"yes"
5563         then
5564                 if test "x$enable_old_ctdb" = "xyes" ; then
5565                         AC_MSG_WARN([ignoring missing CHECK_SRVIDS (--enable-old-ctdb)])
5566                 else
5567                         ctdb_broken="support for CHECK_SRVIDS control missing"
5568                         have_cluster_support=no
5569                 fi
5570         fi
5573 if test "x$have_cluster_support" = "xyes" ; then
5574         # In ctdb 1.0.57, ctdb_control_tcp was temporarily renamed
5575         # to ctdb_tcp_client.
5576         AC_CHECK_TYPE(struct ctdb_tcp_client,[
5577                 AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
5578         ],,[
5579         #include "confdefs.h"
5580         #define NO_CONFIG_H
5581         #include "replace.h"
5582         #include "system/wait.h"
5583         #include "system/network.h"
5584         #include <talloc.h>
5585         #include <tdb.h>
5586         #include <ctdb.h>
5587         #include <ctdb_private.h>
5588         ])
5591 if test "x$have_cluster_support" = "xyes" ; then
5592         AC_CHECK_TYPE(struct ctdb_control_tcp,[
5593                 AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5594         ],[
5595                 ctdb_broken="missing struct ctdb_control_tcp"
5596                 have_cluster_support=no
5597         ],[
5598         #include "confdefs.h"
5599         #define NO_CONFIG_H
5600         #include "replace.h"
5601         #include "system/wait.h"
5602         #include "system/network.h"
5603         #include <talloc.h>
5604         #include <tdb.h>
5605         #include <ctdb.h>
5606         #include <ctdb_private.h>
5607         ])
5610 # test for optional ipv6 support in ctdb:
5611 if test "x$have_cluster_support" = "xyes" ; then
5612         AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5613                 AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5614         ],,[
5615         #include "confdefs.h"
5616         #define NO_CONFIG_H
5617         #include "replace.h"
5618         #include "system/wait.h"
5619         #include "system/network.h"
5620         #include <talloc.h>
5621         #include <tdb.h>
5622         #include <ctdb.h>
5623         #include <ctdb_private.h>
5624         ])
5627 CPPFLAGS="$SAVED_CPPFLAGS"
5629 fi # (if test "$with_cluster_support" != "no")
5631 if test x"$have_cluster_support" = "xno" ; then
5632         case "$with_cluster_support" in
5633         yes)
5634                 AC_MSG_ERROR(["cluster support not available: $ctdb_broken"])
5635                 ;;
5636         auto)
5637                 AC_MSG_WARN(["cluster support not available: $ctdb_broken"])
5638                 ;;
5639         esac
5640         with_cluster_support=no
5643 if test "x$with_cluster_support" != "xno"; then
5644     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5645     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5646     AC_MSG_NOTICE(Building with cluster support)
5647 else
5648     AC_MSG_NOTICE(Building without cluster support)
5652 #################################################
5653 # check for rtnetlink
5655 AC_CHECK_HEADERS([linux/netlink.h],
5656   AC_CHECK_HEADERS([linux/rtnetlink.h],[],[],
5657                    [#include <bits/sockaddr.h>
5658                     #include <linux/netlink.h>]),
5659   [],[#include <bits/sockaddr.h>])
5661 #################################################
5662 # check for ACL support
5664 AC_MSG_CHECKING(whether to support ACLs)
5665 AC_ARG_WITH(acl-support,
5666 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5667 [ case "$withval" in
5668         yes|no)
5669                 with_acl_support="$withval"
5670                 ;;
5671   esac ])
5673 if test x"$with_acl_support" = x ; then
5674         with_acl_support="auto"
5677 AC_MSG_RESULT($with_acl_support)
5679 if test x"$with_acl_support" = x"no"; then
5680         AC_MSG_RESULT(Disabling ACL support)
5681         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5682 else
5683         AC_MSG_NOTICE(checking whether ACL support is available:)
5684         case "$host_os" in
5685         *sysv5*)
5686                 AC_MSG_NOTICE(Using UnixWare ACLs)
5687                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5688                 default_static_modules="$default_static_modules vfs_solarisacl"
5689                 ;;
5690         *solaris*)
5691                 AC_MSG_NOTICE(Using solaris ACLs)
5692                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5693                 ACL_LIBS="$ACL_LIBS -lsec"
5694                 default_static_modules="$default_static_modules vfs_solarisacl"
5695                 ;;
5696         *hpux*)
5697                 AC_MSG_NOTICE(Using HPUX ACLs)
5698                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5699                 default_static_modules="$default_static_modules vfs_hpuxacl"
5700                 ;;
5701         *irix*)
5702                 AC_MSG_NOTICE(Using IRIX ACLs)
5703                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5704                 default_static_modules="$default_static_modules vfs_irixacl"
5705                 ;;
5706         *aix*)
5707                 AC_MSG_NOTICE(Using AIX ACLs)
5708                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5709                 default_static_modules="$default_static_modules vfs_aixacl"
5710                 ;;
5711         *osf*)
5712                 AC_MSG_NOTICE(Using Tru64 ACLs)
5713                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5714                 ACL_LIBS="$ACL_LIBS -lpacl"
5715                 default_static_modules="$default_static_modules vfs_tru64acl"
5716                 ;;
5717         *darwin*)
5718                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5719                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5720                 ;;
5721         *)
5722                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5723                 case "$host_os" in
5724                 *linux*)
5725                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5726                         ;;
5727                 esac
5728                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5729                         acl_LIBS=$LIBS
5730                         LIBS="$LIBS $ACL_LIBS"
5731                         AC_TRY_LINK([
5732                                 #include <sys/types.h>
5733                                 #include <sys/acl.h>
5734                         ],[
5735                                 acl_t acl;
5736                                 int entry_id;
5737                                 acl_entry_t *entry_p;
5738                                 return acl_get_entry(acl, entry_id, entry_p);
5739                         ],
5740                         [samba_cv_HAVE_POSIX_ACLS=yes],
5741                         [samba_cv_HAVE_POSIX_ACLS=no])
5742                         LIBS=$acl_LIBS
5743                 ])
5744                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5745                         AC_MSG_NOTICE(Using posix ACLs)
5746                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5747                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5748                                 acl_LIBS=$LIBS
5749                                 LIBS="$LIBS $ACL_LIBS"
5750                                 AC_TRY_LINK([
5751                                         #include <sys/types.h>
5752                                         #include <sys/acl.h>
5753                                 ],[
5754                                         acl_permset_t permset_d;
5755                                         acl_perm_t perm;
5756                                         return acl_get_perm_np(permset_d, perm);
5757                                 ],
5758                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5759                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5760                                 LIBS=$acl_LIBS
5761                         ])
5762                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5763                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5764                         fi
5765                         default_static_modules="$default_static_modules vfs_posixacl"
5766                 else
5767                         AC_MSG_NOTICE(ACL support is not avaliable)
5768                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5769                 fi
5770                 ;;
5771         esac
5772 fi # with_acl_support
5774 #################################################
5775 # check if we have FreeBSD sunacl
5776 case "$host_os" in
5777 *freebsd*)
5778     AC_CHECK_HEADER(sunacl.h)
5779     if test x"$ac_cv_header_sunacl_h" = xyes ; then
5780        AC_DEFINE(HAVE_FREEBSD_SUNACL_H,1,[Whether we have FreeBSD sunacl around])
5781        ZFSACL_LIBS=-lsunacl
5782        AC_SUBST(ZFSACL_LIBS)
5783        default_shared_modules="$default_shared_modules vfs_zfsacl"
5784     fi
5785     ;;
5786 esac
5788 #################################################
5789 # check for AIO support
5791 AC_MSG_CHECKING(whether to support asynchronous io)
5792 AC_ARG_WITH(aio-support,
5793 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5794 [ case "$withval" in
5795   yes)
5797         AC_MSG_RESULT(yes)
5798         case "$host_os" in
5799         *)
5800                 AIO_LIBS=$LIBS
5801                 no_rt_LIBS=$LIBS
5802                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5803                 LIBS=$no_rt_LIBS
5804                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5805                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5806                 aio_LIBS=$LIBS
5807                 LIBS=$AIO_LIBS
5808                 AC_TRY_LINK([#include <sys/types.h>
5809 #include <aio.h>],
5810 [ struct aiocb a; return aio_read(&a);],
5811 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5812                 LIBS=$aio_LIBS])
5813                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5814                 aio_LIBS=$LIBS
5815                 LIBS=$AIO_LIBS
5816                 AC_TRY_LINK([#include <sys/types.h>
5817 #include <aio.h>],
5818 [ struct aiocb64 a; return aio_read64(&a);],
5819 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5820                 LIBS=$aio_LIBS])
5821                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5822                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5823                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5824                         LIBS=$AIO_LIBS
5825                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5826                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5827                         LIBS=$AIO_LIBS
5828                 fi
5830                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5831                         AC_MSG_CHECKING(for aio_read)
5832                         AC_LINK_IFELSE([#include <aio.h>
5833 int main() { struct aiocb a; return aio_read(&a); }],
5834 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5835 [AC_MSG_RESULT(no)])
5837                         AC_MSG_CHECKING(for aio_write)
5838                         AC_LINK_IFELSE([#include <aio.h>
5839 int main() { struct aiocb a; return aio_write(&a); }],
5840 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5841 [AC_MSG_RESULT(no)])
5843                         AC_MSG_CHECKING(for aio_fsync)
5844                         AC_LINK_IFELSE([#include <aio.h>
5845 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5846 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5847 [AC_MSG_RESULT(no)])
5849                         AC_MSG_CHECKING(for aio_return)
5850                         AC_LINK_IFELSE([#include <aio.h>
5851 int main() { struct aiocb a; return aio_return(&a); }],
5852 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5853 [AC_MSG_RESULT(no)])
5855                         AC_MSG_CHECKING(for aio_error)
5856                         AC_LINK_IFELSE([#include <aio.h>
5857 int main() { struct aiocb a; return aio_error(&a); }],
5858 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5859 [AC_MSG_RESULT(no)])
5861                         AC_MSG_CHECKING(for aio_cancel)
5862                         AC_LINK_IFELSE([#include <aio.h>
5863 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5864 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5865 [AC_MSG_RESULT(no)])
5867                         AC_MSG_CHECKING(for aio_suspend)
5868                         AC_LINK_IFELSE([#include <aio.h>
5869 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5870 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5871 [AC_MSG_RESULT(no)])
5872                 fi
5874                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5875                         AC_MSG_CHECKING(for aio_read64)
5876                         AC_LINK_IFELSE([#include <aio.h>
5877 int main() { struct aiocb a; return aio_read64(&a); }],
5878 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5879 [AC_MSG_RESULT(no)])
5881                         AC_MSG_CHECKING(for aio_write64)
5882                         AC_LINK_IFELSE([#include <aio.h>
5883 int main() { struct aiocb a; return aio_write64(&a); }],
5884 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5885 [AC_MSG_RESULT(no)])
5887                         AC_MSG_CHECKING(for aio_fsync64)
5888                         AC_LINK_IFELSE([#include <aio.h>
5889 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5890 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5891 [AC_MSG_RESULT(no)])
5893                         AC_MSG_CHECKING(for aio_return64)
5894                         AC_LINK_IFELSE([#include <aio.h>
5895 int main() { struct aiocb a; return aio_return64(&a); }],
5896 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5897 [AC_MSG_RESULT(no)])
5899                         AC_MSG_CHECKING(for aio_error64)
5900                         AC_LINK_IFELSE([#include <aio.h>
5901 int main() { struct aiocb a; return aio_error64(&a); }],
5902 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5903 [AC_MSG_RESULT(no)])
5905                         AC_MSG_CHECKING(for aio_cancel64)
5906                         AC_LINK_IFELSE([#include <aio.h>
5907 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5908 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5909 [AC_MSG_RESULT(no)])
5911                         AC_MSG_CHECKING(for aio_suspend64)
5912                         AC_LINK_IFELSE([#include <aio.h>
5913 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5914 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5915 [AC_MSG_RESULT(no)])
5916                 fi
5917             ;;
5918         esac
5919         ;;
5920   *)
5921     AC_MSG_RESULT(no)
5922     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5923     ;;
5924   esac ],
5925   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5926   AC_MSG_RESULT(no)
5929 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5930         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5931                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5932                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5933         fi
5936 #################################################
5937 # check for sendfile support
5939 with_sendfile_support=yes
5940 AC_MSG_CHECKING(whether to check to support sendfile)
5941 AC_ARG_WITH(sendfile-support,
5942 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5943 [ case "$withval" in
5944   yes)
5946         AC_MSG_RESULT(yes);
5948         case "$host_os" in
5949         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5950                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5951                 AC_TRY_LINK([#include <sys/sendfile.h>],
5953 int tofd, fromfd;
5954 off64_t offset;
5955 size_t total;
5956 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5958 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5960                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5961                 AC_TRY_LINK([#include <sys/sendfile.h>],
5963 int tofd, fromfd;
5964 off_t offset;
5965 size_t total;
5966 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5968 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5970 # Try and cope with broken Linux sendfile....
5971                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5972                 AC_TRY_LINK([\
5973 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5974 #undef _FILE_OFFSET_BITS
5975 #endif
5976 #include <sys/sendfile.h>],
5978 int tofd, fromfd;
5979 off_t offset;
5980 size_t total;
5981 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5983 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5985         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5986                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5987                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5988                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5989         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5990                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5991                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5992                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5993         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5994                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5995                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5996         else
5997                 AC_MSG_RESULT(no);
5998         fi
6000         ;;
6001         *freebsd* | *dragonfly* )
6002                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
6003                 AC_TRY_LINK([\
6004 #include <sys/types.h>
6005 #include <unistd.h>
6006 #include <sys/socket.h>
6007 #include <sys/uio.h>],
6009         int fromfd, tofd, ret, total=0;
6010         off_t offset, nwritten;
6011         struct sf_hdtr hdr;
6012         struct iovec hdtrl;
6013         hdr.headers = &hdtrl;
6014         hdr.hdr_cnt = 1;
6015         hdr.trailers = NULL;
6016         hdr.trl_cnt = 0;
6017         hdtrl.iov_base = NULL;
6018         hdtrl.iov_len = 0;
6019         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
6021 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
6023         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
6024                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
6025                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
6026                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
6027         else
6028                 AC_MSG_RESULT(no);
6029         fi
6030         ;;
6032         *hpux*)
6033                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
6034                 AC_TRY_LINK([\
6035 #include <sys/socket.h>
6036 #include <sys/uio.h>],
6038         int fromfd, tofd;
6039         size_t total=0;
6040         struct iovec hdtrl[2];
6041         ssize_t nwritten;
6042         off64_t offset;
6044         hdtrl[0].iov_base = 0;
6045         hdtrl[0].iov_len = 0;
6047         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
6049 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
6050         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
6051                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
6052                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
6053                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
6054         else
6055                 AC_MSG_RESULT(no);
6056         fi
6058                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
6059                 AC_TRY_LINK([\
6060 #include <sys/socket.h>
6061 #include <sys/uio.h>],
6063         int fromfd, tofd;
6064         size_t total=0;
6065         struct iovec hdtrl[2];
6066         ssize_t nwritten;
6067         off_t offset;
6069         hdtrl[0].iov_base = 0;
6070         hdtrl[0].iov_len = 0;
6072         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
6074 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
6075         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
6076                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
6077                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
6078                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
6079         else
6080                 AC_MSG_RESULT(no);
6081         fi
6082         ;;
6084         *solaris*)
6085                 AC_CHECK_LIB(sendfile,sendfilev)
6086                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
6087                 AC_TRY_LINK([\
6088 #include <sys/sendfile.h>],
6090         int sfvcnt;
6091         size_t xferred;
6092         struct sendfilevec vec[2];
6093         ssize_t nwritten;
6094         int tofd;
6096         sfvcnt = 2;
6098         vec[0].sfv_fd = SFV_FD_SELF;
6099         vec[0].sfv_flag = 0;
6100         vec[0].sfv_off = 0;
6101         vec[0].sfv_len = 0;
6103         vec[1].sfv_fd = 0;
6104         vec[1].sfv_flag = 0;
6105         vec[1].sfv_off = 0;
6106         vec[1].sfv_len = 0;
6107         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
6109 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
6111         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
6112                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
6113                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
6114                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
6115         else
6116                 AC_MSG_RESULT(no);
6117         fi
6119                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
6120                 AC_TRY_LINK([\
6121 #include <sys/sendfile.h>],
6123         int sfvcnt;
6124         size_t xferred;
6125         struct sendfilevec vec[2];
6126         ssize_t nwritten;
6127         int tofd;
6129         sfvcnt = 2;
6131         vec[0].sfv_fd = SFV_FD_SELF;
6132         vec[0].sfv_flag = 0;
6133         vec[0].sfv_off = 0;
6134         vec[0].sfv_len = 0;
6136         vec[1].sfv_fd = 0;
6137         vec[1].sfv_flag = 0;
6138         vec[1].sfv_off = 0;
6139         vec[1].sfv_len = 0;
6140         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
6142 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
6144         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
6145                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
6146                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
6147                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
6148         else
6149                 AC_MSG_RESULT(no);
6150         fi
6151         ;;
6152         *aix*)
6153                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
6154                 AC_TRY_LINK([\
6155 #include <sys/socket.h>],
6157         int fromfd, tofd;
6158         size_t total=0;
6159         struct sf_parms hdtrl;
6160         ssize_t nwritten;
6161         off64_t offset;
6163         hdtrl.header_data = 0;
6164         hdtrl.header_length = 0;
6165         hdtrl.file_descriptor = fromfd;
6166         hdtrl.file_offset = 0;
6167         hdtrl.file_bytes = 0;
6168         hdtrl.trailer_data = 0;
6169         hdtrl.trailer_length = 0;
6171         nwritten = send_file(&tofd, &hdtrl, 0);
6173 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
6174         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
6175                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
6176                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
6177                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
6178         else
6179                 AC_MSG_RESULT(no);
6180         fi
6181         ;;
6182         *)
6183         ;;
6184         esac
6185         ;;
6186   *)
6187     AC_MSG_RESULT(no)
6188     ;;
6189   esac ],
6190   AC_MSG_RESULT(yes)
6193 ############################################
6194 # See if we have the Linux readahead syscall.
6196 AC_CACHE_CHECK([for Linux readahead],
6197                 samba_cv_HAVE_LINUX_READAHEAD,[
6198     AC_TRY_LINK([
6199 #if defined(HAVE_UNISTD_H)
6200 #include <unistd.h>
6201 #endif
6202 #include <fcntl.h>],
6203     [ssize_t err = readahead(0,0,0x80000);],
6204     samba_cv_HAVE_LINUX_READAHEAD=yes,
6205     samba_cv_HAVE_LINUX_READAHEAD=no)])
6207 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
6208   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
6209              [Whether Linux readahead is available])
6212 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
6214 ############################################
6215 # See if we have the posix_fadvise syscall.
6217 AC_CACHE_CHECK([for posix_fadvise],
6218                 samba_cv_HAVE_POSIX_FADVISE,[
6219     AC_TRY_LINK([
6220 #if defined(HAVE_UNISTD_H)
6221 #include <unistd.h>
6222 #endif
6223 #include <fcntl.h>],
6224     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
6225     samba_cv_HAVE_POSIX_FADVISE=yes,
6226     samba_cv_HAVE_POSIX_FADVISE=no)])
6228 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
6229   AC_DEFINE(HAVE_POSIX_FADVISE,1,
6230              [Whether posix_fadvise is available])
6233 ############################################
6234 # See if we have the Linux splice syscall.
6236 case "$host_os" in
6237 *linux*)
6238 AC_CACHE_CHECK([for Linux splice],
6239                 samba_cv_HAVE_LINUX_SPLICE,[
6240     AC_TRY_LINK([
6241 #if defined(HAVE_UNISTD_H)
6242 #include <unistd.h>
6243 #endif
6244 #include <fcntl.h>],
6245     [long ret = splice(0,0,1,0,400,0);],
6246     samba_cv_HAVE_LINUX_SPLICE=yes,
6247     samba_cv_HAVE_LINUX_SPLICE=no)])
6250 samba_cv_HAVE_LINUX_SPLICE=no
6252 esac
6254 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
6255   AC_DEFINE(HAVE_LINUX_SPLICE,1,
6256              [Whether Linux splice is available])
6259 AC_HAVE_DECL(splice, [#include <fcntl.h>])
6261 ############################################
6262 # See if we have the a broken readlink syscall.
6264 AC_CACHE_CHECK([for a broken readlink syscall],samba_cv_HAVE_BROKEN_READLINK,[
6265 AC_TRY_RUN([#include "${srcdir-.}/../tests/readlink.c"],
6266         samba_cv_HAVE_BROKEN_READLINK=no,samba_cv_HAVE_BROKEN_READLINK=yes,samba_cv_HAVE_BROKEN_READLINK=cross)
6268 if test x"$samba_cv_HAVE_BROKEN_READLINK" = x"yes"; then
6269         AC_DEFINE(HAVE_BROKEN_READLINK,1,[Whether the readlink syscall is broken])
6272 #################################################
6273 # Check whether winbind is supported on this platform.  If so we need to
6274 # build and install client programs, sbin programs and shared libraries
6276 AC_MSG_CHECKING(whether to build winbind)
6278 # Initially, the value of $host_os decides whether winbind is supported
6280 HAVE_WINBIND=yes
6281 HAVE_WBCLIENT=no
6283 # Define external wbclient library to link against.  This disables winbind.
6284 # We define this here so --with-winbind can override it.
6285 AC_ARG_WITH(wbclient,
6286 [AS_HELP_STRING([--with-wbclient], [Use external wbclient (optional)])],
6288   case "$withval" in
6289         no)
6290                 HAVE_WBCLIENT=no
6291                 ;;
6292         yes)
6293                 HAVE_WBCLIENT=yes
6294                 HAVE_WINBIND=no
6295                 ;;
6296         *)
6297                 HAVE_WBCLIENT=yes
6298                 HAVE_WINBIND=no
6299                 WBCLIENT_INCLUDES="-I$withval/include"
6300                 WBCLIENT_LDFLAGS="-L$withval/lib"
6301                 ;;
6302   esac ],
6305 AC_SUBST(WBCLIENT_INCLUDES)
6306 AC_SUBST(WBCLIENT_LDFLAGS)
6307 AC_SUBST(WBCLIENT_LIBS)
6310 # Define the winbind shared library name and any specific linker flags
6311 # it needs to be built with.
6313 WINBIND_NSS="../nsswitch/libnss_winbind.$SHLIBEXT"
6314 WINBIND_WINS_NSS="../nsswitch/libnss_wins.$SHLIBEXT"
6315 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
6316 NSSSONAMEVERSIONSUFFIX=""
6318 case "$host_os" in
6319         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
6320                 NSSSONAMEVERSIONSUFFIX=".2"
6321                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_linux.o"
6322                 ;;
6323         *freebsd[[5-9]]*)
6324                 # FreeBSD winbind client is implemented as a wrapper around
6325                 # the Linux version.
6326                 NSSSONAMEVERSIONSUFFIX=".1"
6327                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_freebsd.o \
6328                     ../nsswitch/winbind_nss_linux.o"
6329                 WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
6330                 WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
6331                 ;;
6333         *netbsd*[[3-9]]*)
6334                 # NetBSD winbind client is implemented as a wrapper
6335                 # around the Linux version. It needs getpwent_r() to
6336                 # indicate libc's use of the correct nsdispatch API.
6337                 #
6338                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
6339                         WINBIND_NSS_EXTRA_OBJS="\
6340                             ../nsswitch/winbind_nss_netbsd.o \
6341                             ../nsswitch/winbind_nss_linux.o"
6342                         WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
6343                         WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
6344                 else
6345                         HAVE_WINBIND=no
6346                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
6347                 fi
6348                 ;;
6349         *irix*)
6350                 # IRIX has differently named shared libraries
6351                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_irix.o"
6352                 WINBIND_NSS="../nsswitch/libns_winbind.$SHLIBEXT"
6353                 WINBIND_WINS_NSS="../nsswitch/libns_wins.$SHLIBEXT"
6354                 ;;
6355         *solaris*)
6356                 # Solaris winbind client is implemented as a wrapper around
6357                 # the Linux version.
6358                 NSSSONAMEVERSIONSUFFIX=".1"
6359                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o \
6360                     ../nsswitch/winbind_nss_linux.o"
6361                 ;;
6362         *hpux11*)
6363                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o"
6364                 ;;
6365         *aix*)
6366                 # AIX has even differently named shared libraries.  No
6367                 # WINS support has been implemented yet.
6368                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_aix.o"
6369                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
6370                 WINBIND_NSS="../nsswitch/WINBIND"
6371                 WINBIND_WINS_NSS=""
6372                 ;;
6373         *)
6374                 HAVE_WINBIND=no
6375                 winbind_no_reason=", unsupported on $host_os"
6376                 ;;
6377 esac
6379 # Check the setting of --with-winbind
6381 AC_ARG_WITH(winbind,
6382 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
6384   case "$withval" in
6385         yes)
6386                 HAVE_WINBIND=yes
6387                 HAVE_WBCLIENT=no
6388                 ;;
6389         no)
6390                 HAVE_WINBIND=no
6391                 winbind_reason=""
6392                 ;;
6393   esac ],
6396 # We need unix domain sockets for winbind
6398 if test x"$HAVE_WINBIND" = x"yes"; then
6399         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
6400                 winbind_no_reason=", no unix domain socket support on $host_os"
6401                 HAVE_WINBIND=no
6402         fi
6405 # Display test results
6407 if test x"$HAVE_WINBIND" = x"no"; then
6408         WINBIND_NSS=""
6409         WINBIND_WINS_NSS=""
6411 if test x"$HAVE_WBCLIENT" = x"yes"; then
6412         AC_CHECK_LIB(wbclient, wbcInterfaceDetails,
6413                      [LIBWBCLIENT_LIBS="-lwbclient"], AC_MSG_ERROR([Could not find wbclient]), [$WBCLIENT_LDFLAGS])
6414         LIBWBCLIENT_LIBS="$LIBWBCLIENT_LIBS $WBCLIENT_LDFLAGS"
6415         AC_MSG_RESULT(yes)
6416         AC_DEFINE(WITH_WINBIND,1,[Whether to link to wbclient])
6417         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6418 else
6419         if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
6420                 BUILD_LIBWBCLIENT_SHARED=no
6421         else
6422                 BUILD_LIBWBCLIENT_SHARED=yes
6423         fi
6425         LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
6426         LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
6427         LIBWBCLIENT_SOVER=0
6428         LIBWBCLIENT_FULLVER=0
6429         LIBWBCLIENT_SHARED_TARGET_SOVER=$LIBWBCLIENT_SHARED_TARGET.$LIBWBCLIENT_SOVER
6430         LIBWBCLIENT_SHARED_TARGET_FULLVER=$LIBWBCLIENT_SHARED_TARGET.$LIBWBCLIENT_FULLVER
6431         if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
6432                 NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6433                 ## Only worry about libwbclient if we have shared
6434                 # library support
6435                 LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
6436                 LIBWBCLIENT=libwbclient
6437                 INSTALL_LIBWBCLIENT=installlibwbclient
6438                 UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
6439                 LIBWBCLIENT_LIBS="-lwbclient"
6440         else
6441                 LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
6442                 LIBWBCLIENT_LIBS=$LIBWBCLIENT_STATIC_TARGET
6443         fi
6446 if test x"$HAVE_WINBIND" = x"yes"; then
6447         AC_MSG_RESULT(yes)
6448         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6450         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6451         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6452         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6453                 PAM_MODULES="$PAM_MODULES pam_winbind"
6454                 INSTALL_PAM_MODULES="installpammodules"
6455                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6456         fi
6458         # we use winbind, check for krb5 locate_plugin support:
6459         AC_CHECK_HEADERS([krb5/locate_plugin.h], [], [],
6460                 [[#ifdef HAVE_KRB5_H
6461                  #include <krb5.h>
6462                  #endif
6463         ]])
6464         if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
6465                 WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
6466                 if test x"$BLDSHARED" = x"true" ; then
6467                         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
6468                 fi
6469         fi
6470         # end of krb5 locate_plugin check
6471 else
6472         AC_MSG_RESULT(no$winbind_no_reason)
6475 AC_SUBST(WINBIND_NSS)
6476 AC_SUBST(WINBIND_WINS_NSS)
6477 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
6478 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
6479 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
6481 AC_SUBST(WINBIND_KRB5_LOCATOR)
6483 # Solaris 10 does have new member in nss_XbyY_key
6484 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6485                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6486                 [#include <nss_dbdefs.h>])
6488 # Solaris has some extra fields in struct passwd that need to be
6489 # initialised otherwise nscd crashes.
6491 AC_CHECK_MEMBER(struct passwd.pw_comment,
6492                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6493                 [#include <pwd.h>])
6495 AC_CHECK_MEMBER(struct passwd.pw_age,
6496                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6497                 [#include <pwd.h>])
6499 # AIX 4.3.x and 5.1 do not have as many members in
6500 # struct secmethod_table as AIX 5.2
6501 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6502        [#include <usersec.h>])
6503 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6504        [#include <usersec.h>])
6506 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6507 AC_TRY_COMPILE([#include <sys/types.h>
6508 #include <sys/socket.h>],
6509 [struct ucred cred;
6510  socklen_t cred_len;
6511  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6513 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6514 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6515     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6518 AC_CACHE_CHECK([for getpeereid],samba_cv_HAVE_GETPEEREID,[
6519 AC_TRY_LINK([#include <sys/types.h>
6520 #include <unistd.h>],
6521 [uid_t uid; gid_t gid; int ret;
6522  ret = getpeereid(0, &uid, &gid);
6524 samba_cv_HAVE_GETPEEREID=yes,samba_cv_HAVE_GETPEEREID=no)])
6525 if test x"$samba_cv_HAVE_GETPEEREID" = xyes; then
6526    AC_DEFINE(HAVE_GETPEEREID,1,
6527              [Whether we have getpeereid to get socket credentials])
6531 #################################################
6532 # Check to see if we should use the included popt
6534 AC_ARG_WITH(included-popt,
6535 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
6537   case "$withval" in
6538         yes)
6539                 INCLUDED_POPT=yes
6540                 ;;
6541         no)
6542                 INCLUDED_POPT=no
6543                 ;;
6544   esac ],
6546 if test x"$INCLUDED_POPT" != x"yes"; then
6547     AC_CHECK_LIB(popt, poptGetContext,
6548                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6551 AC_MSG_CHECKING(whether to use included popt)
6552 if test x"$INCLUDED_POPT" = x"yes"; then
6553     AC_MSG_RESULT(yes)
6554     BUILD_POPT='$(POPT_OBJ)'
6555     POPTLIBS='$(POPT_OBJ)'
6556     FLAGS1="-I\$(srcdir)/../lib/popt"
6557 else
6558     AC_MSG_RESULT(no)
6559         BUILD_POPT=""
6560     POPTLIBS="-lpopt"
6562 AC_SUBST(BUILD_POPT)
6563 AC_SUBST(POPTLIBS)
6564 AC_SUBST(FLAGS1)
6566 #################################################
6567 # Check if user wants DNS service discovery support
6569 AC_ARG_ENABLE(dnssd,
6570 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=no)])])
6572 AC_SUBST(DNSSD_LIBS)
6573 if test x"$enable_dnssd" = x"yes"; then
6574     have_dnssd_support=yes
6576     AC_CHECK_HEADERS(dns_sd.h)
6577     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6578         have_dnssd_support=no
6579     fi
6581     # On Darwin the DNSSD API is in libc, but on other platforms it's
6582     # probably in -ldns_sd
6583     AC_CHECK_FUNCS(DNSServiceRegister)
6584     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6585     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6586             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6587         have_dnssd_support=no
6588     fi
6590     if test x"$have_dnssd_support" = x"yes"; then
6591         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6592                 [Whether to enable DNS service discovery support])
6593     else
6594         if test x"$enable_dnssd" = x"yes"; then
6595             AC_MSG_ERROR(DNS service discovery support not available)
6596         fi
6597     fi
6601 #################################################
6602 # Check if user wants avahi support
6604 AC_ARG_ENABLE(avahi,
6605 [AS_HELP_STRING([--enable-avahi], [Enable Avahi support (default=auto)])])
6607 if test x"$enable_avahi" != x"no"; then
6608     have_avahi_support=yes
6610     AC_CHECK_HEADERS(avahi-common/watch.h)
6611     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6612         have_avahi_support=no
6613     fi
6615     AC_CHECK_HEADERS(avahi-client/client.h)
6616     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6617         have_avahi_support=no
6618     fi
6620     save_LIBS="$LIBS"
6621     AC_CHECK_LIB(avahi-client, avahi_client_new,[have_avahi_client_new=yes])
6622     AC_CHECK_LIB(avahi-common, avahi_strerror,[have_avahi_strerror=yes])
6623     LIBS="$save_LIBS"
6625     if test x"$have_avahi_client_new" != x"yes" -o \
6626        x"$have_avahi_strerror" != x"yes" ; then
6627         have_avahi_support=no
6628     fi
6630     if test x"$have_avahi_support" = x"yes"; then
6631         AC_SUBST(AVAHI_LIBS, "-lavahi-client -lavahi-common")
6632         AC_DEFINE(WITH_AVAHI_SUPPORT, 1,
6633                 [Whether to enable avahi support])
6634         AC_SUBST(AVAHI_OBJ, "lib/avahi.o smbd/avahi_register.o")
6635     else
6636         if test x"$enable_avahi" = x"yes"; then
6637             AC_MSG_ERROR(avahi support not available)
6638         fi
6639     fi
6643 #################################################
6644 # Set pthread stuff
6646 PTHREAD_CFLAGS=error
6647 PTHREAD_LDFLAGS=error
6649 # If it's error, then the user didn't 
6650 # define it.
6651 if test "x$PTHREAD_LDFLAGS" = xerror; then
6652   AC_CHECK_LIB(pthread, pthread_attr_init, [
6653              PTHREAD_CFLAGS="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
6654              PTHREAD_LDFLAGS="-lpthread" ])
6657 if test "x$PTHREAD_LDFLAGS" = xerror; then
6658   AC_CHECK_LIB(pthreads, pthread_attr_init, [
6659              PTHREAD_CFLAGS="-D_THREAD_SAFE"
6660              PTHREAD_LDFLAGS="-lpthreads" ])
6663 if test "x$PTHREAD_LDFLAGS" = xerror; then
6664    AC_CHECK_LIB(c_r, pthread_attr_init, [
6665                 PTHREAD_CFLAGS="-D_THREAD_SAFE -pthread"
6666                 PTHREAD_LDFLAGS="-pthread" ])
6669 if test "x$PTHREAD_LDFLAGS" = xerror; then
6670    AC_CHECK_FUNC(pthread_attr_init, [
6671                  PTHREAD_CFLAGS="-D_REENTRANT"
6672                  PTHREAD_LDFLAGS="-lpthread" ])
6675 # especially for HP-UX, where the AC_CHECK_FUNC macro fails to test for
6676 # pthread_attr_init. On pthread_mutex_lock it works there...
6677 if test "x$PTHREAD_LDFLAGS" = xerror; then
6678    AC_CHECK_LIB(pthread, pthread_mutex_lock, [
6679                 PTHREAD_CFLAGS="-D_REENTRANT"
6680                 PTHREAD_LDFLAGS="-lpthread" ])
6683 AC_SUBST(PTHREAD_CFLAGS)
6684 AC_SUBST(PTHREAD_LDFLAGS)
6686 samba_cv_HAVE_PTHREAD=no
6687 if test x"$PTHREAD_CFLAGS" != xerror -a x"$PTHREAD_LDFLAGS" != xerror; then
6688         samba_cv_HAVE_PTHREAD=yes
6689         # now check for pthread.h with pthread-correct CFLAGS and LDFLAGS:
6690         ac_save_CFLAGS=$CFLAGS
6691         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6692         ac_save_LDFLAGS=$LDFLAGS
6693         LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
6694         AC_CHECK_HEADERS(pthread.h)
6695         CFLAGS=$ac_save_CFLAGS
6696         LDFLAGS=$ac_save_LDFLAGS
6697         AC_DEFINE(HAVE_PTHREAD, 1, [Do we have pthreads around?])
6700 #################################################
6701 # Check if user wants pthreadpool support
6703 AC_ARG_ENABLE(pthreadpool,
6704 [AS_HELP_STRING([--enable-pthreadpool], [Enable pthreads pool helper support (default=no)])])
6706 if test x"$enable_pthreadpool" = xyes -a x"$samba_cv_HAVE_PTHREAD" != x"yes"; then
6707         AC_MSG_ERROR([pthreadpool support cannot be enabled when pthread support was not found])
6710 if test x"$enable_pthreadpool" = x"yes" -a x"$samba_cv_HAVE_PTHREAD" = x"yes"; then
6711     LIBS="$LIBS $PTHREAD_LDFLAGS"
6712     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6713     AC_DEFINE(WITH_PTHREADPOOL, 1, [Whether to include pthreadpool helpers])
6714     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool/pthreadpool.o")
6715     PTHREADPOOLTEST="bin/pthreadpooltest\$(EXEEXT)"
6716     AC_SUBST(PTHREADPOOLTEST)
6719 #################################################
6720 # Check to see if we should use the included iniparser
6722 AC_ARG_WITH(included-iniparser,
6723 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6725   case "$withval" in
6726         yes)
6727                 INCLUDED_INIPARSER=yes
6728                 ;;
6729         no)
6730                 INCLUDED_INIPARSER=no
6731                 ;;
6732   esac ],
6734 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6735     AC_CHECK_LIB(iniparser, iniparser_load,
6736                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6739 AC_MSG_CHECKING(whether to use included iniparser)
6740 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6741     AC_MSG_RESULT(yes)
6742     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6743         INIPARSERLIBS=""
6744     FLAGS1="$FLAGS1 -I\$(srcdir)/../lib/iniparser/src"
6745 else
6746     AC_MSG_RESULT(no)
6747         BUILD_INIPARSER=""
6748     INIPARSERLIBS="-liniparser"
6750 AC_SUBST(BUILD_INIPARSER)
6751 AC_SUBST(INIPARSERLIBS)
6752 AC_SUBST(FLAGS1)
6754 ###################################################
6755 # Check for different/missing (set|get|end)netgrent prototypes
6756 CFLAGS_SAVE=$CFLAGS
6757 if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
6758         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6760 AC_CACHE_CHECK([for setnetgrent prototype],samba_cv_setnetgrent_prototype, [
6761     AC_TRY_COMPILE([#include<netdb.h>
6762                     #ifdef HAVE_NETGROUP_H
6763                     #include<netgroup.h>
6764                     #endif],[setnetgrent("foo")],
6765                     samba_cv_setnetgrent_prototype=yes, samba_cv_setnetgrent_prototype=no)])
6766 if test x"$samba_cv_setnetgrent_prototype" = x"yes"; then
6767     AC_DEFINE(HAVE_SETNETGRENT_PROTOTYPE, 1, [If setnetgrent prototype is defined])
6769 AC_CACHE_CHECK([for getnetgrent prototype],samba_cv_getnetgrent_prototype, [
6770     AC_TRY_COMPILE([#include<netdb.h>
6771                     #ifdef HAVE_NETGROUP_H
6772                     #include<netgroup.h>
6773                     #endif],[char *dom, *user,*host; getnetgrent(&dom,&user,&host)],
6774                     samba_cv_getnetgrent_prototype=yes, samba_cv_getnetgrent_prototype=no)])
6775 if test x"$samba_cv_getnetgrent_prototype" = x"yes"; then
6776     AC_DEFINE(HAVE_GETNETGRENT_PROTOTYPE, 1, [If getnetgrent prototype is defined])
6778 AC_CACHE_CHECK([for endnetgrent prototype],samba_cv_endnetgrent_prototype, [
6779     AC_TRY_COMPILE([#include<netdb.h>
6780                     #ifdef HAVE_NETGROUP_H
6781                     #include<netgroup.h>
6782                     #endif],[endnetgrent()],
6783                     samba_cv_endnetgrent_prototype=yes, samba_cv_endnetgrent_prototype=no)])
6784 if test x"$samba_cv_endnetgrent_prototype" = x"yes"; then
6785     AC_DEFINE(HAVE_ENDNETGRENT_PROTOTYPE, 1, [If endnetgrent prototype is defined])
6788 CFLAGS=$CFLAGS_SAVE
6790 # Checks for the vfs_fileid module
6791 # Start
6792 AC_CHECK_FUNC(getmntent)
6794 AC_CHECK_HEADERS(sys/statfs.h)
6796 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
6797 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6798              AC_TRY_RUN([
6799                 #include <sys/types.h>
6800                 #include <sys/statfs.h>
6801                 int main(void)
6802                 {
6803                         struct statfs fsd;
6804                         fsid_t fsid = fsd.f_fsid;
6805                         return statfs (".", &fsd);
6806                 }],
6807                 vfsfileid_cv_statfs=yes,
6808                 vfsfileid_cv_statfs=no,
6809                 vfsfileid_cv_statfs=cross)
6811 AC_MSG_RESULT($vfsfileid_cv_statfs)
6813 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6814         x"$vfsfileid_cv_statfs" = x"yes"; then
6815         default_shared_modules="$default_shared_modules vfs_fileid"
6817 # End
6818 # Checks for the vfs_fileid module
6821 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6823         eval MODULE_DEFAULT_$i=STATIC
6824 done
6826 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6828         dnl Fall back to static if we cannot build shared libraries
6829         eval MODULE_DEFAULT_$i=STATIC
6831         if test $BLDSHARED = true; then
6832                 eval MODULE_DEFAULT_$i=SHARED
6833         fi
6834 done
6836 dnl Always build these modules static
6837 MODULE_rpc_spoolss=STATIC
6838 MODULE_rpc_srvsvc=STATIC
6839 MODULE_idmap_tdb=STATIC
6840 MODULE_idmap_passdb=STATIC
6841 MODULE_idmap_nss=STATIC
6843 MODULE_nss_info_template=STATIC
6845 AC_ARG_WITH(static-modules,
6846 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6847 [ if test $withval; then
6848         for i in `echo $withval | sed -e 's/,/ /g'`
6849         do
6850                 eval MODULE_$i=STATIC
6851         done
6852 fi ])
6854 AC_ARG_WITH(shared-modules,
6855 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6856 [ if test $withval; then
6857         for i in `echo $withval | sed -e 's/,/ /g'`
6858         do
6859                         eval MODULE_$i=SHARED
6860         done
6861 fi ])
6863 if test x"$MODULE_DEFAULT_vfs_notify_fam" = xSTATIC -o \
6864                 x"$MODULE_vfs_notify_fam" = xSTATIC ; then
6865         SMBD_FAM_LIBS="$SMB_FAM_LIBS"
6866         AC_SUBST(SMBD_FAM_LIBS)
6869 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o passdb/pdb_ipa.o passdb/pdb_ldap_util.o passdb/pdb_ldap_schema.o,
6870                    "bin/ldapsam.$SHLIBEXT", PDB,
6871                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6872 SMB_MODULE(pdb_ads, passdb/pdb_ads.o \$(TLDAP_OBJ), "bin/ads.$SHLIBEXT", PDB)
6873 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6874 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6875 SMB_MODULE(pdb_wbc_sam, passdb/pdb_wbc_sam.o, "bin/wbc_sam.$SHLIBEXT", PDB)
6876 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6878 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6879 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6880 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6881 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6882 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6883 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6884 SMB_MODULE(idmap_autorid, winbindd/idmap_autorid.o, "bin/autorid.$SHLIBEXT", IDMAP)
6885 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6886 SMB_MODULE(idmap_hash, \$(IDMAP_HASH_OBJ), "bin/hash.$SHLIBEXT", IDMAP)
6887 SMB_MODULE(idmap_adex, \$(IDMAP_ADEX_OBJ), "bin/adex.$SHLIBEXT", IDMAP)
6888 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6890 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6891 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6893 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6895 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6896 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6897 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6898 SMB_MODULE(auth_wbc, \$(AUTH_WBC_OBJ), "bin/wbc.$SHLIBEXT", AUTH)
6899 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6900 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6901 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6902 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6903 SMB_MODULE(auth_netlogond, \$(AUTH_NETLOGOND_OBJ), "bin/netlogond.$SHLIBEXT", AUTH)
6904 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6906 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6907 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6908 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6909 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6910 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6911 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6912 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6913 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6914 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6915 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6916 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6917 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6918 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6919 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6920 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6921 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6922 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6923 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6924 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6925 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6926 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6927 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6928 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6929 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6930 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6931 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6932 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6933 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6934 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6935 SMB_MODULE(vfs_gpfs_hsm_notify, \$(VFS_GPFS_PREFETCH_OBJ), "bin/gpfs_hsm_notify.$SHLIBEXT", VFS)
6936 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6937 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6938 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6939 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6940 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6941 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6942 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6943 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6944 SMB_MODULE(vfs_acl_xattr, \$(VFS_ACL_XATTR_OBJ), "bin/acl_xattr.$SHLIBEXT", VFS)
6945 SMB_MODULE(vfs_acl_tdb, \$(VFS_ACL_TDB_OBJ), "bin/acl_tdb.$SHLIBEXT", VFS)
6946 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6947 SMB_MODULE(vfs_onefs, \$(VFS_ONEFS), "bin/onefs.$SHLIBEXT", VFS)
6948 SMB_MODULE(vfs_onefs_shadow_copy, \$(VFS_ONEFS_SHADOW_COPY), "bin/onefs_shadow_copy.$SHLIBEXT", VFS)
6949 SMB_MODULE(vfs_dirsort, \$(VFS_DIRSORT_OBJ), "bin/dirsort.$SHLIBEXT", VFS)
6950 SMB_MODULE(vfs_scannedonly, \$(VFS_SCANNEDONLY_OBJ), "bin/scannedonly.$SHLIBEXT", VFS)
6951 SMB_MODULE(vfs_crossrename, \$(VFS_CROSSRENAME_OBJ), "bin/crossrename.$SHLIBEXT", VFS)
6952 SMB_MODULE(vfs_linux_xfs_sgid, \$(VFS_LINUX_XFS_SGID_OBJ), "bin/linux_xfs_sgid.$SHLIBEXT", VFS)
6953 SMB_MODULE(vfs_time_audit, \$(VFS_TIME_AUDIT_OBJ), "bin/time_audit.$SHLIBEXT", VFS)
6955 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6957 SMB_MODULE(perfcount_onefs, \$(PERFCOUNT_ONEFS), "bin/pc_onefs.$SHLIBEXT", PERFCOUNT)
6958 SMB_MODULE(perfcount_test, \$(PERFCOUNT_TEST), "bin/pc_test.$SHLIBEXT", PERFCOUNT)
6959 SMB_SUBSYSTEM(PERFCOUNT,smbd/perfcount.o)
6961 SMB_MODULE(gpext_registry, libgpo/gpext/registry.o, "bin/registry.$SHLIBEXT", GPEXT)
6962 SMB_MODULE(gpext_scripts, libgpo/gpext/scripts.o, "bin/scripts.$SHLIBEXT", GPEXT)
6963 SMB_MODULE(gpext_security, libgpo/gpext/security.o, "bin/security.$SHLIBEXT", GPEXT)
6964 SMB_SUBSYSTEM(GPEXT, libgpo/gpext/gpext.o)
6966 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6968 #################################################
6969 # do extra things if we are running insure
6971 if test "${ac_cv_prog_CC}" = "insure"; then
6972         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6975 #################################################
6976 # If run from the build farm, enable NASTY hacks
6977 #################################################
6978 AC_MSG_CHECKING(whether to enable build farm hacks)
6979 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6980         AC_MSG_RESULT(yes)
6981         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6982 else
6983         AC_MSG_RESULT(no)
6986 #################################################
6987 # check for bad librt/libpthread interactions
6989 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6990     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6991     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6992     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6994 SMB_IF_RTSIGNAL_BUG(
6995         [
6996             # Have RT_SIGNAL bug, need to check whether the problem will
6997             # affect anything we have configured.
6999             rt_do_error=no
7000             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
7001                 if test x"$rt_signal_lease_ok" = x"no" ; then
7002                     rt_do_error=yes
7003                 fi
7004             fi
7006             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
7007                 if test x"$rt_signal_notify_ok" = x"no" ; then
7008                     rt_do_error=yes
7009                 fi
7010             fi
7012             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
7013                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
7014                 if test x"$rt_signal_aio_ok" = x"no" ; then
7015                     rt_do_error=yes
7016                 fi
7017             fi
7019             if test x"$rt_do_error" = x"yes" ; then
7020                 SMB_IS_LIBPTHREAD_LINKED(
7021                     [
7022                         cat<<MSG
7024 *** On this platforms, linking Samba against pthreads causes problems
7025 *** with the oplock and change notification mechanisms. You may be
7026 *** using pthreads as a side-effect of using the --with-aio-support
7027 *** or --with-profiling-data options. Please remove these and try again.
7030                     ],
7031                     [
7032                         cat<<MSG
7034 *** On this platform, the oplock and change notification mechanisms do not
7035 *** appear to work. Please report this problem to samba-technical@samba.org
7036 *** and attach the config.log file from this directory.
7039                     ])
7040                 AC_MSG_ERROR(unable to use realtime signals on this platform)
7041             fi
7042         ],
7043         [
7044             # no RT_SIGNAL bug, we are golden
7045             SMB_IS_LIBPTHREAD_LINKED(
7046                 [
7047                     AC_MSG_WARN(using libpthreads - this may degrade performance)
7048                 ])
7050         ],
7051         [
7052             # cross compiling, I hope you know what you are doing
7053             true
7054         ])
7058 m4_include(../lib/zlib/zlib.m4)
7060 if test x$smbtorture4_possible = xyes; then
7061         saved_USESHARED="$USESHARED"
7062         USESHARED="false"
7063         smbtorture4_path="bin/smbtorture4"
7064         smbtorture4_option="-t bin/smbtorture4"
7065         AC_SUBST(smbtorture4_path)
7066         AC_SUBST(smbtorture4_option)
7067         USESHARED="$saved_USESHARED"
7068         SMBTORTURE4="bin/smbtorture4"
7069         AC_SUBST(SMBTORTURE4)
7072 AC_SUBST(ZLIB_LIBS)
7073 AC_SUBST(ZLIB_OBJS)
7074 AC_ZLIB([ZLIB_OBJS=""], [
7075         ZLIB_LIBS=""
7076         for o in adler32.o compress.o crc32.o gzio.o uncompr.o \
7077                      deflate.o trees.o zutil.o inflate.o infback.o \
7078                          inftrees.o inffast.o
7079         do
7080                 ZLIB_OBJS="$ZLIB_OBJS ../lib/zlib/$o"
7081         done
7082         CFLAGS="-I../lib/zlib $CFLAGS"
7085 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
7087 if test "x$enable_dmalloc" = xyes
7088 then
7089         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
7090         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
7091                   [Define to check invariants around some common functions])
7092         LIBS="$LIBS -ldmalloc"
7095 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
7096 LIB_REMOVE_USR_LIB(LDFLAGS)
7097 LIB_REMOVE_USR_LIB(LIBS)
7099 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
7100 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
7101 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
7103 #################################################
7104 # Display summary of libraries detected
7106 AC_MSG_RESULT([Using libraries:])
7107 AC_MSG_RESULT([    LIBS = $LIBS])
7108 if test x"$with_ads_support" != x"no"; then
7109     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
7111 if test x"$with_ldap_support" != x"no"; then
7112     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
7114 if test x"$with_dnsupdate_support" != x"no"; then
7115     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
7117 if test x"$have_dnssd_support" != x"no"; then
7118     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
7120 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
7122 #################################################
7123 # final configure stuff
7125 AC_MSG_CHECKING([configure summary])
7126 AC_TRY_RUN([#include "${srcdir-.}/../tests/summary.c"],
7127            AC_MSG_RESULT(yes),
7128            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
7129            AC_MSG_WARN([cannot run when cross-compiling]))
7131 dnl Merge in developer cflags from now on
7132 AC_SUBST(DEVELOPER_CFLAGS)
7133 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes" -o x"$picky_developer" = x"yes"; then
7134     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
7137 # Stuff the smbd-only libraries at the end of the smbd link
7138 # path (if we have them).
7139 SMBD_LIBS="$samba_dmapi_libs"
7140 AC_SUBST(SMBD_LIBS)
7142 CFLAGS="${CFLAGS} \$(FLAGS)"
7143 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
7145 # If we had to expand the includes, make tsure the output file is moved back
7146 AC_OUTPUT_COMMANDS([
7147 if test -f Makefile-noincludes -a ! -f Makefile -a ! -h Makefile ; then
7148         ln -s Makefile-noincludes Makefile
7152 AC_OUTPUT(Makefile
7153           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
7154           lib/netapi/examples/Makefile
7155           lib/netapi/tests/Makefile
7156           pkgconfig/smbclient.pc
7157           pkgconfig/wbclient.pc
7158           pkgconfig/netapi.pc
7159           pkgconfig/smbsharemodes.pc
7160           ../examples/libsmbclient/Makefile.internal
7161           )
7163 #################################################
7164 # Print very concise instructions on building/use
7165 if test "x$enable_dmalloc" = xyes
7166 then
7167         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
7168         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])