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