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