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