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