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