s3-gse: Allow the GSSAPI wrapper to load a keytab using gss_krb5_import_cred()
[kai/samba.git] / source3 / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.54 or above
4 AC_PREREQ(2.54)
5
6 AC_INIT([Samba],[3],[samba-technical@samba.org])
7
8 AC_CONFIG_SRCDIR([include/includes.h])
9 AC_CONFIG_HEADER(include/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   AC_CHECK_FUNC_EXT(gss_krb5_import_cred, $KRB5_LIBS)
3864
3865   # MIT krb5 1.8 does not expose this call (yet)
3866   AC_CHECK_DECLS(krb5_get_credentials_for_user, [], [], [#include <krb5.h>])
3867
3868   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3869   # but does have the symbol
3870   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3871
3872   LIBS="$KRB5_LIBS $LIBS"
3873
3874   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3875         smb_krb5_cv_ticket_has_keyinfo,
3876         [
3877             AC_TRY_COMPILE(
3878             [
3879                 #include <krb5.h>
3880             ],
3881             [
3882                 krb5_ticket ticket;
3883                 krb5_kvno kvno;
3884                 krb5_enctype enctype;
3885
3886                 enctype = ticket.enc_part.enctype;
3887                 kvno = ticket.enc_part.kvno;
3888             ],
3889             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3890             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3891         ])
3892
3893   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3894         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3895             [Whether the krb5_ticket structure contains the kvno and enctype])
3896   fi
3897
3898   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3899           smb_krb5_cv_creds_opt_free_context,
3900           [
3901                 AC_TRY_COMPILE([
3902                     #include <krb5.h>],
3903                     [
3904                         krb5_context ctx;
3905                         krb5_get_init_creds_opt *opt = NULL;
3906                         krb5_get_init_creds_opt_free(ctx, opt);
3907                     ],
3908                     [smb_krb5_cv_creds_opt_free_context=yes],
3909                     [smb_krb5_cv_creds_opt_free_context=no]
3910                 )
3911           ])
3912
3913   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3914         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3915             [Whether krb5_get_init_creds_opt_free takes a context argument])
3916   fi
3917
3918   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3919     AC_TRY_COMPILE([
3920         #include <krb5.h>],
3921         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3922         [smb_krb5_cv_verify_checksum=7],
3923         [smb_krb5_cv_verify_checksum=6],
3924     )
3925   ])
3926   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3927
3928   AC_CACHE_CHECK([for checksum in krb5_checksum],
3929                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3930     AC_TRY_COMPILE([#include <krb5.h>],
3931       [krb5_checksum cksum; cksum.checksum.length = 0;],
3932       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3933       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3934
3935   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3936     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3937                [Whether the krb5_checksum struct has a checksum property])
3938   fi
3939
3940   AC_CACHE_CHECK([for etype in EncryptedData],
3941                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3942     AC_TRY_COMPILE([#include <krb5.h>],
3943       [EncryptedData edata; edata.etype = 0;],
3944       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3945       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3946
3947   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3948     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3949                [Whether the EncryptedData struct has a etype property])
3950   fi
3951
3952   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3953                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3954     AC_TRY_COMPILE([#include <krb5.h>],
3955       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3956       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3957       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3958
3959   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3960     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3961                [Whether the krb5_ap_req struct has a ticket pointer])
3962   fi
3963
3964   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3965                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3966     AC_TRY_COMPILE([#include <krb5.h>],
3967       [krb5_error err; err.e_data = NULL;],
3968       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3969       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3970
3971   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3972     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3973                [Whether the krb5_error struct has a e_data pointer])
3974   fi
3975
3976   AC_CACHE_CHECK([for krb5_crypto type],
3977                 samba_cv_HAVE_KRB5_CRYPTO,[
3978     AC_TRY_COMPILE([#include <krb5.h>],
3979       [krb5_crypto crypto;],
3980       samba_cv_HAVE_KRB5_CRYPTO=yes,
3981       samba_cv_HAVE_KRB5_CRYPTO=no)])
3982
3983   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3984     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3985                [Whether the type krb5_crypto exists])
3986   fi
3987
3988   AC_CACHE_CHECK([for krb5_encrypt_block type],
3989                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3990     AC_TRY_COMPILE([#include <krb5.h>],
3991       [krb5_encrypt_block block;],
3992       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3993       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3994
3995   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3996     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3997                [Whether the type krb5_encrypt_block exists])
3998   fi
3999
4000   AC_CACHE_CHECK([for addrtype in krb5_address],
4001                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
4002     AC_TRY_COMPILE([#include <krb5.h>],
4003       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
4004       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
4005       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
4006
4007   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
4008     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
4009                [Whether the krb5_address struct has a addrtype property])
4010   fi
4011
4012   AC_CACHE_CHECK([for addr_type in krb5_address],
4013                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
4014     AC_TRY_COMPILE([#include <krb5.h>],
4015       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
4016       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
4017       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
4018
4019   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
4020     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
4021               [Whether the krb5_address struct has a addr_type property])
4022   fi
4023
4024   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
4025                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
4026                  [AC_TRY_COMPILE([#include <krb5.h>],
4027     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
4028     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
4029
4030   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
4031     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
4032               [Whether the krb5_ticket struct has a enc_part2 property])
4033   fi
4034
4035   AC_CACHE_CHECK([for keyblock in krb5_creds],
4036                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
4037     AC_TRY_COMPILE([#include <krb5.h>],
4038       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
4039       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
4040       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
4041
4042   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
4043     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
4044               [Whether the krb5_creds struct has a keyblock property])
4045   fi
4046
4047   AC_CACHE_CHECK([for session in krb5_creds],
4048                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
4049     AC_TRY_COMPILE([#include <krb5.h>],
4050       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
4051       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
4052       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
4053
4054   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
4055     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
4056               [Whether the krb5_creds struct has a session property])
4057   fi
4058
4059   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
4060                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
4061     AC_TRY_COMPILE([#include <krb5.h>],
4062       [krb5_keyblock key; key.keyvalue.data = NULL;],
4063       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
4064       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
4065
4066   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
4067     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
4068               [Whether the krb5_keyblock struct has a keyvalue property])
4069   fi
4070
4071   found_arcfour_hmac=no
4072   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
4073                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
4074     AC_TRY_COMPILE([#include <krb5.h>],
4075       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
4076       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
4077       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
4078   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
4079                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
4080     AC_TRY_COMPILE([#include <krb5.h>],
4081       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
4082       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
4083       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
4084 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
4085 # w.r.t. arcfour and windows, so we must not enable it here
4086   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
4087           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
4088     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
4089               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type definition is available])
4090     found_arcfour_hmac=yes
4091   fi
4092   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC],
4093                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC,[
4094     AC_TRY_COMPILE([#include <krb5.h>],
4095       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC;],
4096       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=yes,
4097       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=no)])
4098   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC" = x"yes"; then
4099     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC,1,
4100               [Whether the ENCTYPE_ARCFOUR_HMAC key type definition is available])
4101     found_arcfour_hmac=yes
4102   fi
4103
4104   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
4105                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
4106     AC_TRY_COMPILE([#include <krb5.h>],
4107       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
4108       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
4109       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
4110
4111   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
4112     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
4113               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
4114   fi
4115
4116   AC_CACHE_CHECK([for KV5M_KEYTAB],
4117                  samba_cv_HAVE_KV5M_KEYTAB,[
4118     AC_TRY_COMPILE([#include <krb5.h>],
4119       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
4120       samba_cv_HAVE_KV5M_KEYTAB=yes,
4121       samba_cv_HAVE_KV5M_KEYTAB=no)])
4122
4123   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
4124       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
4125              [Whether the KV5M_KEYTAB option is available])
4126   fi
4127
4128   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
4129                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
4130     AC_TRY_COMPILE([#include <krb5.h>],
4131       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
4132       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
4133       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
4134
4135   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
4136     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
4137               [Whether KRB5_KU_OTHER_CKSUM is available])
4138   fi
4139
4140   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
4141                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
4142     AC_TRY_COMPILE([#include <krb5.h>],
4143       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
4144       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
4145       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
4146
4147   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
4148     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
4149               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
4150   fi
4151
4152   AC_CACHE_CHECK([for the krb5_princ_component macro],
4153                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
4154     AC_TRY_LINK([#include <krb5.h>],
4155       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
4156       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
4157       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
4158
4159   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
4160     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
4161                [Whether krb5_princ_component is available])
4162   fi
4163
4164   AC_CACHE_CHECK([for key in krb5_keytab_entry],
4165                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
4166     AC_TRY_COMPILE([#include <krb5.h>],
4167       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
4168       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
4169       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
4170
4171   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
4172     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
4173               [Whether krb5_keytab_entry has key member])
4174   fi
4175
4176   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
4177                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
4178     AC_TRY_COMPILE([#include <krb5.h>],
4179       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
4180       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
4181       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
4182
4183   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
4184     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
4185               [Whether krb5_keytab_entry has keyblock member])
4186   fi
4187
4188   AC_CACHE_CHECK([for magic in krb5_address],
4189                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
4190     AC_TRY_COMPILE([#include <krb5.h>],
4191       [krb5_address addr; addr.magic = 0;],
4192       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
4193       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
4194
4195   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
4196     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
4197               [Whether the krb5_address struct has a magic property])
4198   fi
4199
4200   AC_CACHE_CHECK([for WRFILE: keytab support],
4201                 samba_cv_HAVE_WRFILE_KEYTAB,[
4202     AC_TRY_RUN([
4203 #include<krb5.h>
4204   main()
4205   {
4206     krb5_context context;
4207     krb5_keytab keytab;
4208
4209     krb5_init_context(&context);
4210     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
4211   }],
4212   samba_cv_HAVE_WRFILE_KEYTAB=yes,
4213   samba_cv_HAVE_WRFILE_KEYTAB=no)])
4214
4215   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
4216       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
4217                [Whether the WRFILE:-keytab is supported])
4218   fi
4219
4220   AC_CACHE_CHECK([for krb5_realm type],
4221                 samba_cv_HAVE_KRB5_REALM_TYPE,[
4222     AC_TRY_COMPILE([#include <krb5.h>],
4223       [krb5_realm realm;],
4224       samba_cv_HAVE_KRB5_REALM_TYPE=yes,
4225       samba_cv_HAVE_KRB5_REALM_TYPE=no)])
4226
4227   if test x"$samba_cv_HAVE_KRB5_REALM_TYPE" = x"yes"; then
4228     AC_DEFINE(HAVE_KRB5_REALM_TYPE,1,
4229                [Whether the type krb5_realm exists])
4230   fi
4231
4232   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
4233                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
4234     AC_TRY_COMPILE([#include <krb5.h>],
4235     [
4236     krb5_context context;
4237     krb5_principal principal;
4238     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
4239     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
4240     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
4241
4242   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
4243     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
4244               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
4245   fi
4246
4247   AC_CACHE_CHECK([for krb5_addresses type],
4248                 samba_cv_HAVE_KRB5_ADDRESSES,[
4249     AC_TRY_COMPILE([#include <krb5.h>],
4250       [krb5_addresses addr;],
4251       samba_cv_HAVE_KRB5_ADDRESSES=yes,
4252       samba_cv_HAVE_KRB5_ADDRESSES=no)])
4253
4254   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
4255     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
4256                [Whether the type krb5_addresses type exists])
4257   fi
4258
4259   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
4260                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
4261     AC_TRY_COMPILE([#include <krb5.h>],
4262     [
4263     krb5_mk_error(0,0,0);],
4264     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
4265     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
4266
4267   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
4268     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
4269               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
4270   fi
4271
4272   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
4273     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
4274         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
4275         AC_TRY_RUN_STRICT([
4276                 #include <stdlib.h>
4277                 #include <krb5.h>
4278                 int main(void) {
4279                         krb5_context context = NULL;
4280                         char *str = NULL;
4281                         krb5_enctype_to_string(context, 1, &str);
4282                         if (str) free (str); 
4283                         return 0;
4284                 }
4285                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4286                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
4287                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
4288
4289     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4290       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4291                 [whether krb5_enctype_to_string takes krb5_context argument])
4292     fi
4293
4294     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4295         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
4296         AC_TRY_RUN_STRICT([
4297                 #include <krb5.h>
4298                 int main(void) {
4299                         char buf[256];
4300                         krb5_enctype_to_string(1, buf, 256);
4301                         return 0;
4302                 }
4303                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4304                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
4305                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
4306
4307     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
4308       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4309                 [whether krb5_enctype_to_string takes size_t argument])
4310     fi
4311   fi
4312
4313   AC_CACHE_CHECK([for krb5_principal_get_realm],
4314                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4315     AC_TRY_LINK([#include <krb5.h>],
4316       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4317       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4318       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4319
4320   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4321     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4322                [Whether the function krb5_principal_get_realm is defined])
4323   fi
4324
4325   AC_CACHE_CHECK([for krb5_princ_realm],
4326                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4327     AC_TRY_LINK([#include <krb5.h>],
4328       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
4329       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
4330       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
4331
4332   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
4333     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
4334                [Whether the macro krb5_princ_realm is defined])
4335   fi
4336
4337   #
4338   #
4339   # Now the decisions whether we can support krb5
4340   #
4341   # NOTE: all tests should be done before this block!
4342   #
4343   #
4344   if test x"$found_arcfour_hmac" != x"yes"; then
4345     AC_MSG_WARN(arcfour-hmac-md5 encryption type not found in -lkrb5)
4346     use_ads=no
4347   fi
4348
4349   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4350     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4351     use_ads=no
4352   fi
4353
4354   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
4355           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
4356   then
4357     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4358     use_ads=no
4359   fi
4360
4361   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4362           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4363   then
4364     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4365     use_ads=no
4366   fi
4367
4368   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4369           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4370   then
4371     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4372     use_ads=no
4373   fi
4374
4375   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
4376           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
4377   then
4378     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
4379     use_ads=no
4380   fi
4381
4382   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
4383
4384       # We only need the following functions if we can't get the enctype
4385       # and kvno out of the ticket directly (ie. on Heimdal).
4386
4387       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
4388       then
4389         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
4390         use_ads=no
4391       fi
4392
4393       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
4394       then
4395         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
4396         use_ads=no
4397       fi
4398
4399   fi
4400
4401   if test x"$use_ads" = x"yes"; then
4402     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4403     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4404     if test x"$have_gssapi" = x"yes"; then
4405       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
4406     fi
4407   else
4408     if test x"$with_ads_support" = x"yes"; then
4409         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4410     else
4411         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4412     fi
4413     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4414     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4415     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4416     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4417     KRB5_LIBS=""
4418     with_ads_support=no
4419   fi
4420   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4421   AC_MSG_RESULT([$use_ads])
4422
4423 LIBS="$ac_save_LIBS"
4424 fi
4425
4426 if test x"$use_ads" != xyes; then
4427         smbtorture4_possible=no
4428 fi
4429
4430 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4431 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4432
4433
4434 ########################################################
4435 # Compile with DNS Updates support?
4436
4437 with_dnsupdate_support=auto
4438 AC_MSG_CHECKING([whether to enable DNS Updates support])
4439
4440 AC_ARG_WITH(dnsupdate,
4441 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default=auto)])],
4442 [ case "$withval" in
4443     yes|no)
4444         with_dnsupdate_support=$withval
4445         ;;
4446   esac ])
4447
4448 AC_MSG_RESULT($with_dnsupdate_support)
4449
4450 if test x"$with_dnsupdate_support" != x"no"; then
4451
4452   ################################################################
4453   # first test for AD / GSSAPI support being enabled
4454         if test x"$have_gssapi" != xyes ; then
4455                 if test x"$with_dnsupdate_support" = x"yes" ; then
4456                         AC_MSG_ERROR(DNS Updates support only possible with AD and GSSAPI support)
4457                 else
4458                         AC_MSG_NOTICE(DNS Updates support only possible with AD and GSSAPI support)
4459                         with_dnsupdate_support=no
4460                 fi
4461         fi
4462   ##################################################################
4463   # then test for uuid.h (necessary to generate unique DNS keynames
4464   # (uuid.h is required for this test)
4465         AC_CHECK_HEADERS(uuid/uuid.h)
4466
4467         
4468         if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4469                 if test x"$with_dnsupdate_support" = x"yes"; then
4470                         AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4471                 else
4472                         AC_MSG_NOTICE(uuid.h is needed to enable DNS Updates support)
4473                 fi
4474                 with_dnsupdate_support=no
4475         fi
4476 fi
4477
4478 if test x"$with_dnsupdate_support" != x"no"; then
4479
4480   ########################################################
4481   # Now see if we can find the uuid libs in standard paths
4482   # On some systems, the uuid API is in libc, so we have to
4483   # be careful not to insert a spurious -luuid.
4484
4485   UUID_LIBS=""
4486   AC_LIBTESTFUNC(uuid, uuid_generate,
4487           [
4488             case " $LIBS " in
4489                 *\ -luuid\ *)
4490                 UUID_LIBS="-luuid"
4491                 SMB_REMOVE_LIB(uuid)
4492                 ;;
4493             esac
4494
4495             with_dnsupdate_support=yes
4496             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4497         ],
4498         [
4499             if test x"$with_dnsupdate_support" = x"yes"; then
4500                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4501             else
4502                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4503             fi
4504             with_dnsupdate_support=no
4505         ])
4506 fi
4507   # finally print out the result:
4508 AC_MSG_CHECKING(whether DNS Updates support is used)
4509 AC_MSG_RESULT([$with_dnsupdate_support])
4510
4511
4512 #################################################
4513 # check for automount support
4514 AC_MSG_CHECKING(whether to use automount)
4515 AC_ARG_WITH(automount,
4516 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4517 [ case "$withval" in
4518   yes)
4519     AC_MSG_RESULT(yes)
4520     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4521     ;;
4522   *)
4523     AC_MSG_RESULT(no)
4524     ;;
4525   esac ],
4526   AC_MSG_RESULT(no)
4527 )
4528
4529 #################################################
4530 # Check for a PAM clear-text auth, accounts, password
4531 # and session support. Most PAM implementations keep their
4532 # headers in /usr/include/security. Darwin keeps its in
4533 # /usr/include/pam.
4534
4535 with_pam_for_crypt=no
4536 try_pam=auto
4537 AC_MSG_CHECKING(whether to try PAM support)
4538 AC_ARG_WITH(pam,
4539 [AS_HELP_STRING([--with-pam], [Include PAM support (default=auto)])],
4540 [ case "$withval" in
4541   yes|no|auto)
4542     try_pam=$withval
4543     ;;
4544   esac
4545 ])
4546 AC_MSG_RESULT([$try_pam])
4547
4548 use_pam=no
4549 create_pam_modules=no
4550 if test x"${try_pam}" != x"no";then
4551         use_pam=yes
4552         create_pam_modules=yes
4553
4554         # Most systems have PAM headers in /usr/include/security, but Darwin
4555         # has them in /usr/include/pam.
4556         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4557         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4558                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4559                 if test x"${try_pam}" = x"yes";then
4560                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4561                 fi
4562                 use_pam=no
4563                 create_pam_modules=no
4564         fi
4565
4566         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4567         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4568                 if test x"${try_pam}" = x"yes";then
4569                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4570                 fi
4571                 use_pam=no
4572                 create_pam_modules=no
4573         fi
4574
4575         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4576                 #if HAVE_SECURITY_PAM_APPL_H
4577                 #include <security/pam_appl.h>
4578                 #endif
4579                 #if HAVE_PAM_PAM_APPL_H
4580                 #include <pam/pam_appl.h>
4581                 #endif
4582         ]])
4583         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4584                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4585                 if test x"${try_pam}" = x"yes";then
4586                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4587        fi
4588                 create_pam_modules=no
4589     fi
4590
4591         if test x"$use_pam" = x"yes"; then
4592     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4593                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4594                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4595     with_pam_for_crypt=yes
4596
4597                 if test x"$create_pam_modules" = x"yes"; then
4598                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4599                         # this checks are optional,
4600                         # we don't care about the results here
4601                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4602                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4603                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4604                 else
4605                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4606                 fi
4607         fi
4608         AC_MSG_CHECKING(whether to use PAM support)
4609         AC_MSG_RESULT([$use_pam])
4610
4611         AC_MSG_CHECKING(whether to have PAM MODULES support)
4612         AC_MSG_RESULT([$create_pam_modules])
4613
4614         AC_TRY_COMPILE([
4615                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4616                 #include <security/pam_appl.h>
4617                 #elif defined(HAVE_PAM_PAM_APPL_H)
4618                 #include <pam/pam_appl.h>
4619                 #endif],[
4620                 pam_set_item(0, PAM_RHOST, 0);
4621                 ],
4622                 AC_DEFINE(HAVE_PAM_RHOST, 1,
4623                           [Define to 1 if PAM_RHOST is available]),[])
4624
4625         AC_TRY_COMPILE([
4626                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4627                 #include <security/pam_appl.h>
4628                 #elif defined(HAVE_PAM_PAM_APPL_H)
4629                 #include <pam/pam_appl.h>
4630                 #endif],[
4631                 pam_set_item(0, PAM_TTY, 0);
4632                 ],
4633                 AC_DEFINE(HAVE_PAM_TTY, 1,
4634                           [Define to 1 if PAM_TTY is available]),[])
4635
4636 fi # try_pam != no
4637
4638 #################################################
4639 # check for PAM_RADIO_TYPE
4640 AC_TRY_COMPILE([
4641 #if (!defined(LINUX))
4642
4643 #define PAM_EXTERN extern
4644 #if defined(HAVE_SECURITY_PAM_APPL_H)
4645 #include <security/pam_appl.h>
4646 #elif defined(HAVE_PAM_PAM_APPL_H)
4647 #include <pam/pam_appl.h>
4648 #endif
4649
4650 #endif
4651
4652 #if defined(HAVE_SECURITY_PAM_MODULES_H)
4653 #include <security/pam_modules.h>
4654 #elif defined(HAVE_PAM_PAM_MODULES_H)
4655 #include <pam/pam_modules.h>
4656 #endif
4657
4658 #if defined(HAVE_SECURITY__PAM_MACROS_H)
4659 #include <security/_pam_macros.h>
4660 #elif defined(HAVE_PAM__PAM_MACROS_H)
4661 #include <pam/_pam_macros.h>
4662 #endif
4663
4664 #ifdef HAVE_SECURITY_PAM_EXT_H
4665 #include <security/pam_ext.h>
4666 #endif
4667 ],
4668 [int i; i = PAM_RADIO_TYPE; ],
4669 AC_DEFINE(HAVE_PAM_RADIO_TYPE, 1, [Define to 1 if PAM_RADIO_TYPE is available]),[])
4670
4671 #################################################
4672 # check for pam_smbpass support
4673 PAM_MODULES=""
4674 INSTALL_PAM_MODULES=""
4675 UNINSTALL_PAM_MODULES=""
4676
4677 try_pam_smbpass=auto
4678 AC_MSG_CHECKING(whether to use pam_smbpass)
4679 AC_ARG_WITH(pam_smbpass,
4680 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=auto)])],
4681 [ case "$withval" in
4682   yes|no|auto)
4683     try_pam_smbpass=$withval
4684   ;;
4685   *)
4686     AC_MSG_ERROR([valid options are yes,no,auto])
4687   ;;
4688   esac
4689 ])
4690
4691 if test x"${try_pam_smbpass}" = xno ; then
4692         use_pam_smbpass=no
4693 else
4694         use_pam_smbpass=yes
4695         # Conditions under which pam_smbpass can't be built.
4696         if test x"$BLDSHARED" != xtrue ; then
4697                 if test x"${try_pam_smbpass}" = xyes ; then
4698                         AC_MSG_ERROR([No support for shared modules])
4699                 fi
4700                 use_pam_smbpass=no
4701         elif test x"$create_pam_modules" != xyes ; then
4702                 if test x"${try_pam_smbpass}" = xyes ; then
4703                         AC_MSG_ERROR([No support for PAM MODULES])
4704                 fi
4705                 use_pam_smbpass=no
4706         fi
4707
4708         if test x"${use_pam_smbpass}" = xyes ; then 
4709                 PAM_MODULES="pam_smbpass"
4710                 INSTALL_PAM_MODULES="installpammodules"
4711                 UNINSTALL_PAM_MODULES="uninstallpammodules"
4712         fi
4713 fi
4714 AC_MSG_RESULT([$use_pam_smbpass])
4715
4716
4717 ##
4718 ## moved after the check for -lcrypt in order to
4719 ## ensure that the necessary libraries are included
4720 ## check checking for truncated salt.  Wrapped by the
4721 ## $with_pam_for_crypt variable as above   --jerry
4722 ##
4723 if test $with_pam_for_crypt = no; then
4724 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4725 crypt_LIBS="$LIBS"
4726 LIBS="$AUTH_LIBS $LIBS"
4727 AC_TRY_RUN([#include "${srcdir-.}/../tests/crypttest.c"],
4728         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4729 LIBS="$crypt_LIBS"])
4730 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4731         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4732 fi
4733 fi
4734
4735 #################################################
4736 # check for a NISPLUS_HOME support
4737 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4738 AC_ARG_WITH(nisplus-home,
4739 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4740 [ case "$withval" in
4741   yes)
4742     AC_MSG_RESULT(yes)
4743     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4744     ;;
4745   *)
4746     AC_MSG_RESULT(no)
4747     ;;
4748   esac ],
4749   AC_MSG_RESULT(no)
4750 )
4751
4752 #################################################
4753 # check for syslog logging
4754 AC_MSG_CHECKING(whether to use syslog logging)
4755 AC_ARG_WITH(syslog,
4756 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4757 [ case "$withval" in
4758   yes)
4759     AC_MSG_RESULT(yes)
4760     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4761     ;;
4762   *)
4763     AC_MSG_RESULT(no)
4764     ;;
4765   esac ],
4766   AC_MSG_RESULT(no)
4767 )
4768
4769 #################################################
4770 # check for custom syslog facility
4771 AC_MSG_CHECKING(whether to use a custom syslog facility)
4772 AC_ARG_WITH(syslog-facility,
4773 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4774 [
4775   if test "$withval" = "no" ; then
4776     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4777   else
4778      if test "$withval" != "yes" ; then
4779         syslog_facility="$withval"
4780         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4781      fi
4782   fi
4783 ])
4784
4785 #################################################
4786 # check for experimental disk-quotas support
4787
4788 samba_cv_WITH_QUOTAS=auto
4789 samba_cv_TRY_QUOTAS=no
4790 samba_cv_RUN_QUOTA_TESTS=auto
4791 samba_cv_WITH_SYS_QUOTAS=auto
4792 samba_cv_TRY_SYS_QUOTAS=auto
4793 samba_cv_SYSQUOTA_FOUND=no
4794
4795 AC_MSG_CHECKING(whether to try disk-quotas support)
4796 AC_ARG_WITH(quotas,
4797 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4798 [ case "$withval" in
4799   yes)
4800     AC_MSG_RESULT(yes)
4801     samba_cv_WITH_QUOTAS=yes
4802     samba_cv_TRY_QUOTAS=yes
4803     samba_cv_RUN_QUOTA_TESTS=yes
4804     #set sys quotas to auto in this case
4805     samba_cv_TRY_SYS_QUOTAS=auto
4806     ;;
4807   auto)
4808     AC_MSG_RESULT(auto)
4809     samba_cv_WITH_QUOTAS=auto
4810     samba_cv_TRY_QUOTAS=auto
4811     samba_cv_RUN_QUOTA_TESTS=auto
4812     #set sys quotas to auto in this case
4813     samba_cv_TRY_SYS_QUOTAS=auto
4814     ;;
4815   no)
4816     AC_MSG_RESULT(no)
4817     samba_cv_WITH_QUOTAS=no
4818     samba_cv_TRY_QUOTAS=no
4819     samba_cv_RUN_QUOTA_TESTS=no
4820     ;;
4821   *)
4822     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4823     ;;
4824   esac ],
4825   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4826 )
4827
4828 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4829 AC_ARG_WITH(sys-quotas,
4830 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4831 [ case "$withval" in
4832   yes)
4833     AC_MSG_RESULT(yes)
4834     samba_cv_WITH_SYS_QUOTAS=yes
4835     samba_cv_TRY_SYS_QUOTAS=yes
4836     samba_cv_RUN_QUOTA_TESTS=yes
4837     ;;
4838   auto)
4839     AC_MSG_RESULT(auto)
4840     samba_cv_WITH_SYS_QUOTAS=auto
4841     samba_cv_TRY_SYS_QUOTAS=auto
4842     samba_cv_RUN_QUOTA_TESTS=auto
4843     ;;
4844   no)
4845     AC_MSG_RESULT(no)
4846     samba_cv_WITH_SYS_QUOTAS=no
4847     samba_cv_TRY_SYS_QUOTAS=no
4848     ;;
4849   *)
4850     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4851     ;;
4852   esac ],
4853   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4854 )
4855
4856 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4857 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4858   case "$host_os" in
4859         *linux*)
4860             AC_MSG_RESULT(yes)
4861             samba_cv_TRY_SYS_QUOTAS=yes
4862             samba_cv_RUN_QUOTA_TESTS=yes
4863             ;;
4864         *)
4865             AC_MSG_RESULT(no)
4866             samba_cv_TRY_SYS_QUOTAS=no
4867             ;;
4868   esac
4869 fi
4870
4871 #############################################
4872 # only check for quota stuff if --with-quotas
4873 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4874
4875 case "$host_os" in
4876         # on linux we didn't need to test we have builtin support
4877         *linux*)
4878             samba_cv_SYSQUOTA_FOUND=yes
4879             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4880             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4881             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4882             AC_MSG_RESULT(yes)
4883
4884             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4885             samba_cv_found_xfs_header=yes
4886             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4887             AC_MSG_RESULT(yes)
4888             ;;
4889         *solaris*)
4890             # need to set this define when using static linking (BUG 1473)
4891             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4892             ;;
4893         *)
4894             ;;
4895 esac
4896
4897 # some broken header files need this
4898 AC_CHECK_HEADER(asm/types.h,[
4899             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4900             AC_ADD_INCLUDE(<asm/types.h>)
4901             ])
4902
4903 # For quotas on Veritas VxFS filesystems
4904 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4905
4906 # For quotas on Linux XFS filesystems
4907 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4908
4909 # For sys/quota.h and linux/quota.h
4910 AC_CHECK_HEADERS(sys/quota.h)
4911
4912 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4913 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4914 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4915 AC_TRY_COMPILE([
4916 #include "confdefs.h"
4917 #ifdef HAVE_SYS_TYPES_H
4918 #include <sys/types.h>
4919 #endif
4920 #ifdef HAVE_ASM_TYPES_H
4921 #include <asm/types.h>
4922 #endif
4923 #include <sys/quota.h>
4924 ],[int i = Q_XGETQUOTA;],
4925 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4926 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4927         samba_cv_found_xfs_header=yes
4928 fi
4929 fi
4930
4931 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4932 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4933 AC_TRY_COMPILE([
4934 #include "confdefs.h"
4935 #ifdef HAVE_SYS_QUOTA_H
4936 #include <sys/quota.h>
4937 #endif
4938 ],[
4939 struct dqblk D;
4940 D.dqb_fsoftlimit = 0;],
4941 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4942 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4943         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4944 fi
4945
4946 ##################
4947 # look for a working quota system
4948
4949 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4950 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4951 AC_TRY_RUN_STRICT([
4952 #define HAVE_QUOTACTL_4A 1
4953 #define AUTOCONF_TEST 1
4954 #include "confdefs.h"
4955 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4956            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4957 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4958     samba_cv_SYSQUOTA_FOUND=yes;
4959     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4960     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4961 fi
4962 fi
4963
4964 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4965 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4966 AC_TRY_RUN_STRICT([
4967 #define HAVE_QUOTACTL_4B 1
4968 #define AUTOCONF_TEST 1
4969 #include "confdefs.h"
4970 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4971            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4972 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4973     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4974     samba_cv_SYSQUOTA_FOUND=yes;
4975     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4976     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4977 fi
4978 fi
4979
4980 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4981 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4982 AC_TRY_RUN_STRICT([
4983 #define HAVE_QUOTACTL_3 1
4984 #define AUTOCONF_TEST 1
4985 #include "confdefs.h"
4986 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4987            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4988 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4989     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4990     samba_cv_SYSQUOTA_FOUND=yes;
4991     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4992     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4993 fi
4994 fi
4995
4996 #################################################
4997 # check for mntent.h and struct mntent
4998 AC_CHECK_HEADERS(mntent.h)
4999 #################################################
5000 # check for setmntent,getmntent,endmntent
5001 AC_CHECK_FUNCS(setmntent getmntent endmntent)
5002
5003 #################################################
5004 # check for devnm.h and struct mntent
5005 AC_CHECK_HEADERS(devnm.h)
5006 #################################################
5007 # check for devnm
5008 AC_CHECK_FUNCS(devnm)
5009
5010 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
5011     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
5012         # if --with-sys-quotas=yes then build it
5013         # you have can use the get/set quota command smb.conf
5014         # options then
5015         samba_cv_SYSQUOTA_FOUND=auto
5016     fi
5017     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
5018         # if --with-sys-quotas=yes then build it
5019         # you have can use the get/set quota command smb.conf
5020         # options then
5021         samba_cv_TRY_SYS_QUOTAS=auto
5022     fi
5023 fi
5024
5025 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
5026 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
5027 SAVE_CPPFLAGS="$CPPFLAGS"
5028 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5029 AC_TRY_COMPILE([
5030 #include "confdefs.h"
5031 #define NO_PROTO_H 1
5032 #define NO_CONFIG_H 1
5033 #define HAVE_SYS_QUOTAS 1
5034 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
5035 #include "${srcdir-.}/lib/sysquotas.c"
5036 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
5037 CPPFLAGS="$SAVE_CPPFLAGS"
5038 ])
5039 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
5040 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
5041     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
5042         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
5043         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
5044         samba_cv_WE_USE_SYS_QUOTAS=yes
5045         AC_MSG_RESULT(yes)
5046     else
5047         AC_MSG_RESULT(no)
5048     fi
5049 fi
5050 fi
5051
5052 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
5053 AC_CACHE_CHECK([whether the sys_quota interface works with NFS],samba_cv_SYSQUOTA_WORKS_NFS,[
5054 SAVE_CPPFLAGS="$CPPFLAGS"
5055 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5056 AC_TRY_COMPILE([
5057 #include "confdefs.h"
5058 #define NO_PROTO_H 1
5059 #define NO_CONFIG_H 1
5060 #define HAVE_SYS_QUOTAS 1
5061 #define HAVE_NFS_QUOTAS 1
5062 #include "${srcdir-.}/lib/sysquotas_nfs.c"
5063 ],[],samba_cv_SYSQUOTA_WORKS_NFS=yes,samba_cv_SYSQUOTA_WORKS_NFS=no)
5064 CPPFLAGS="$SAVE_CPPFLAGS"
5065 ])
5066 if test x"$samba_cv_SYSQUOTA_WORKS_NFS" = x"yes"; then
5067     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
5068         AC_DEFINE(HAVE_NFS_QUOTAS,1,[Whether nfs quota support is available])
5069     fi
5070 fi
5071 fi
5072
5073 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
5074 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
5075 SAVE_CPPFLAGS="$CPPFLAGS"
5076 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5077 AC_TRY_COMPILE([
5078 #include "confdefs.h"
5079 #define NO_PROTO_H 1
5080 #define NO_CONFIG_H 1
5081 #define HAVE_SYS_QUOTAS 1
5082 #define HAVE_XFS_QUOTAS 1
5083 #include "${srcdir-.}/lib/sysquotas_xfs.c"
5084 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
5085 CPPFLAGS="$SAVE_CPPFLAGS"
5086 ])
5087 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
5088     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
5089         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
5090     fi
5091 fi
5092 fi
5093
5094 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
5095 SAVE_CPPFLAGS="$CPPFLAGS"
5096 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5097 AC_TRY_COMPILE([
5098 #include "confdefs.h"
5099 #define NO_PROTO_H 1
5100 #define NO_CONFIG_H 1
5101 #include "${srcdir-.}/smbd/quotas.c"
5102 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
5103 CPPFLAGS="$SAVE_CPPFLAGS"
5104 ])
5105 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
5106 AC_MSG_CHECKING(whether to use the old quota support)
5107     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
5108       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
5109         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
5110         AC_MSG_RESULT(yes)
5111       else
5112         AC_MSG_RESULT(no)
5113       fi
5114     else
5115       AC_MSG_RESULT(no)
5116     fi
5117 fi
5118
5119 ####################
5120 # End of quota check samba_cv_RUN_QUOTA_TESTS
5121 fi
5122
5123 #################################################
5124 # check for experimental utmp accounting
5125
5126 AC_MSG_CHECKING(whether to support utmp accounting)
5127 WITH_UTMP=yes
5128 AC_ARG_WITH(utmp,
5129 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
5130 [ case "$withval" in
5131   no)
5132                 WITH_UTMP=no
5133                 ;;
5134   *)
5135                 WITH_UTMP=yes
5136                 ;;
5137   esac ],
5138 )
5139
5140 # utmp requires utmp.h
5141 # Note similar check earlier, when checking utmp details.
5142
5143 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
5144         utmp_no_reason=", no utmp.h on $host_os"
5145         WITH_UTMP=no
5146 fi
5147
5148 # Display test results
5149
5150 if test x"$WITH_UTMP" = x"yes"; then
5151         AC_MSG_RESULT(yes)
5152         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
5153 else
5154         AC_MSG_RESULT(no$utmp_no_reason)
5155 fi
5156
5157
5158 #################################################
5159 # these tests are taken from the GNU fileutils package
5160 AC_CHECKING(how to get filesystem space usage)
5161 space=no
5162
5163 # Test for statvfs64.
5164 if test $space = no; then
5165   # SVR4
5166   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
5167   [AC_TRY_RUN([
5168 #if defined(HAVE_UNISTD_H)
5169 #include <unistd.h>
5170 #endif
5171 #include <sys/types.h>
5172 #include <sys/statvfs.h>
5173   main ()
5174   {
5175     struct statvfs64 fsd;
5176     exit (statvfs64 (".", &fsd));
5177   }],
5178   fu_cv_sys_stat_statvfs64=yes,
5179   fu_cv_sys_stat_statvfs64=no,
5180   fu_cv_sys_stat_statvfs64=cross)])
5181   if test $fu_cv_sys_stat_statvfs64 = yes; then
5182     space=yes
5183     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
5184   fi
5185 fi
5186
5187 # Perform only the link test since it seems there are no variants of the
5188 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
5189 # because that got a false positive on SCO OSR5.  Adding the declaration
5190 # of a `struct statvfs' causes this test to fail (as it should) on such
5191 # systems.  That system is reported to work fine with STAT_STATFS4 which
5192 # is what it gets when this test fails.
5193 if test $space = no; then
5194   # SVR4
5195   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
5196                  [AC_TRY_LINK([#include <sys/types.h>
5197 #include <sys/statvfs.h>],
5198                               [struct statvfs fsd; statvfs (0, &fsd);],
5199                               fu_cv_sys_stat_statvfs=yes,
5200                               fu_cv_sys_stat_statvfs=no)])
5201   if test $fu_cv_sys_stat_statvfs = yes; then
5202     space=yes
5203     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
5204   fi
5205 fi
5206
5207 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
5208 # This is not the case on ancient Linux systems.
5209
5210 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
5211     AC_TRY_COMPILE([#include <sys/types.h>
5212 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
5213         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
5214 if test x"$samba_cv_fsid_int" = x"yes"; then
5215     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
5216 fi
5217
5218 # fsusage.c assumes that statvfs has an f_frsize entry. Some weird
5219 # systems use f_bsize.
5220 AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [
5221     AC_TRY_COMPILE([#include <sys/types.h>
5222 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0],
5223         samba_cv_frsize=yes,samba_cv_frsize=no)])
5224 if test x"$samba_cv_frsize" = x"yes"; then
5225     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
5226 fi
5227
5228 # Some systems use f_flag in struct statvfs while others use f_flags
5229 AC_CACHE_CHECK([that statvfs.statvfs_f_flag works],samba_cv_statvfs_f_flag, [
5230     AC_TRY_COMPILE([#include <sys/types.h>
5231 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flag = 0],
5232         samba_cv_statvfs_f_flag=yes,samba_cv_statvfs_f_flag=no)])
5233 if test x"$samba_cv_statvfs_f_flag" = x"yes"; then
5234     AC_DEFINE(HAVE_STATVFS_F_FLAG, 1, [Whether statvfs.f_flag exists])
5235 fi
5236
5237 AC_CACHE_CHECK([that statvfs.statvfs_f_flags works],samba_cv_statvfs_f_flags, [
5238     AC_TRY_COMPILE([#include <sys/types.h>
5239 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flags = 0],
5240         samba_cv_statvfs_f_flags=yes,samba_cv_statvfs_f_flags=no)])
5241 if test x"$samba_cv_statvfs_f_flags" = x"yes"; then
5242     AC_DEFINE(HAVE_STATVFS_F_FLAGS, 1, [Whether statvfs.f_flags exists])
5243 fi
5244
5245 if test $space = no; then
5246   # DEC Alpha running OSF/1
5247   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
5248   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
5249   [AC_TRY_RUN([
5250 #include <sys/param.h>
5251 #include <sys/types.h>
5252 #include <sys/mount.h>
5253   main ()
5254   {
5255     struct statfs fsd;
5256     fsd.f_fsize = 0;
5257     exit (statfs (".", &fsd, sizeof (struct statfs)));
5258   }],
5259   fu_cv_sys_stat_statfs3_osf1=yes,
5260   fu_cv_sys_stat_statfs3_osf1=no,
5261   fu_cv_sys_stat_statfs3_osf1=no)])
5262   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5263   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5264     space=yes
5265     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5266   fi
5267 fi
5268
5269 if test $space = no; then
5270 # AIX
5271   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5272 member (AIX, 4.3BSD)])
5273   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5274   [AC_TRY_RUN([
5275 #ifdef HAVE_SYS_PARAM_H
5276 #include <sys/param.h>
5277 #endif
5278 #ifdef HAVE_SYS_MOUNT_H
5279 #include <sys/mount.h>
5280 #endif
5281 #ifdef HAVE_SYS_VFS_H
5282 #include <sys/vfs.h>
5283 #endif
5284   main ()
5285   {
5286   struct statfs fsd;
5287   fsd.f_bsize = 0;
5288   exit (statfs (".", &fsd));
5289   }],
5290   fu_cv_sys_stat_statfs2_bsize=yes,
5291   fu_cv_sys_stat_statfs2_bsize=no,
5292   fu_cv_sys_stat_statfs2_bsize=no)])
5293   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5294   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5295     space=yes
5296     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5297   fi
5298 fi
5299
5300 if test $space = no; then
5301 # SVR3
5302   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5303   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5304   [AC_TRY_RUN([#include <sys/types.h>
5305 #include <sys/statfs.h>
5306   main ()
5307   {
5308   struct statfs fsd;
5309   exit (statfs (".", &fsd, sizeof fsd, 0));
5310   }],
5311     fu_cv_sys_stat_statfs4=yes,
5312     fu_cv_sys_stat_statfs4=no,
5313     fu_cv_sys_stat_statfs4=no)])
5314   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5315   if test $fu_cv_sys_stat_statfs4 = yes; then
5316     space=yes
5317     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5318   fi
5319 fi
5320
5321 if test $space = no; then
5322 # 4.4BSD and NetBSD
5323   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5324 member (4.4BSD and NetBSD)])
5325   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5326   [AC_TRY_RUN([#include <sys/types.h>
5327 #ifdef HAVE_SYS_PARAM_H
5328 #include <sys/param.h>
5329 #endif
5330 #ifdef HAVE_SYS_MOUNT_H
5331 #include <sys/mount.h>
5332 #endif
5333   main ()
5334   {
5335   struct statfs fsd;
5336   fsd.f_fsize = 0;
5337   exit (statfs (".", &fsd));
5338   }],
5339   fu_cv_sys_stat_statfs2_fsize=yes,
5340   fu_cv_sys_stat_statfs2_fsize=no,
5341   fu_cv_sys_stat_statfs2_fsize=no)])
5342   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5343   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5344     space=yes
5345         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5346   fi
5347 fi
5348
5349 if test $space = no; then
5350   # Ultrix
5351   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5352   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5353   [AC_TRY_RUN([#include <sys/types.h>
5354 #ifdef HAVE_SYS_PARAM_H
5355 #include <sys/param.h>
5356 #endif
5357 #ifdef HAVE_SYS_MOUNT_H
5358 #include <sys/mount.h>
5359 #endif
5360 #ifdef HAVE_SYS_FS_TYPES_H
5361 #include <sys/fs_types.h>
5362 #endif
5363   main ()
5364   {
5365   struct fs_data fsd;
5366   /* Ultrix's statfs returns 1 for success,
5367      0 for not mounted, -1 for failure.  */
5368   exit (statfs (".", &fsd) != 1);
5369   }],
5370   fu_cv_sys_stat_fs_data=yes,
5371   fu_cv_sys_stat_fs_data=no,
5372   fu_cv_sys_stat_fs_data=no)])
5373   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5374   if test $fu_cv_sys_stat_fs_data = yes; then
5375     space=yes
5376     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5377   fi
5378 fi
5379
5380 #
5381 # As a gating factor for large file support, in order to
5382 # use <4GB files we must have the following minimal support
5383 # available.
5384 # long long, and a 64 bit off_t or off64_t.
5385 # If we don't have all of these then disable large
5386 # file support.
5387 #
5388 AC_MSG_CHECKING([if large file support can be enabled])
5389 AC_TRY_COMPILE([
5390 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5391 #include <sys/types.h>
5392 #else
5393 __COMPILE_ERROR_
5394 #endif
5395 ],
5396 [int i],
5397 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5398 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5399         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5400 fi
5401 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5402
5403
5404 #################################################
5405 # check for cluster extensions
5406
5407 AC_MSG_CHECKING(cluster support)
5408 AC_ARG_WITH(cluster-support,
5409 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
5410
5411 if test x"$with_cluster_support" = x ; then
5412         with_cluster_support="auto"
5413 fi
5414
5415 AC_MSG_RESULT($with_cluster_support)
5416
5417 AC_ARG_WITH(ctdb,
5418 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
5419 [ case "$withval" in
5420   yes|no)
5421     AC_MSG_WARN([--with-ctdb called without argument])
5422     ;;
5423   *)
5424     CTDB_CPPFLAGS="-I$withval/include"
5425     ;;
5426   esac])
5427
5428 AC_ARG_ENABLE(old-ctdb,
5429         [AS_HELP_STRING([--enable-old-ctdb],
5430                 [Enable build against (too) old ctdb version (default=no)])],,
5431                 [enable_old_ctdb=no])
5432
5433
5434 if test "$with_cluster_support" != "no" ; then
5435
5436 AC_MSG_NOTICE(checking whether cluster support is available)
5437
5438 have_cluster_support="yes"
5439 ctdb_broken="no"
5440
5441 SAVED_CPPFLAGS="$CPPFLAGS"
5442 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS} $CTDB_CPPFLAGS"
5443
5444 AC_CHECK_HEADERS(ctdb.h ctdb_private.h,,,[
5445 #include "confdefs.h"
5446 #define NO_CONFIG_H
5447 #include "replace.h"
5448 #include "system/wait.h"
5449 #include "system/network.h"
5450 #define private #error __USED_RESERVED_WORD_private__
5451 #include <talloc.h>
5452 #include <tdb.h>
5453 #include <ctdb.h>
5454 ])
5455
5456 if test "x$have_cluster_support" = "xyes" -a \
5457         "x$ac_cv_header_ctdb_h" != "xyes"
5458 then
5459         have_cluster_support=no
5460         ctdb_broken="ctdb.h is required for cluster support"
5461 fi
5462
5463 if test "x$have_cluster_support" = "xyes" -a \
5464         "x$ac_cv_header_ctdb_h" != "xyes"
5465 then
5466         have_cluster_support=no
5467         ctdb_broken="ctdb_private.h is required for cluster support"
5468 fi
5469
5470
5471 if test "x$have_cluster_support" = "xyes" ; then
5472         AC_HAVE_DECL(CTDB_CONTROL_TRANS3_COMMIT,[
5473         #include "confdefs.h"
5474         #define NO_CONFIG_H
5475         #include "replace.h"
5476         #include "system/wait.h"
5477         #include "system/network.h"
5478         #include <talloc.h>
5479         #include <tdb.h>
5480         #include <ctdb.h>
5481         #include <ctdb_private.h>
5482         ])
5483         if test x"$ac_cv_have_CTDB_CONTROL_TRANS3_COMMIT_decl" != x"yes"; then
5484                 ctdb_broken="ctdb transaction support missing or too old"
5485                 have_cluster_support=no
5486         fi
5487 fi
5488
5489 if test "x$have_cluster_support" = "xyes" ; then
5490         AC_HAVE_DECL(CTDB_CONTROL_SCHEDULE_FOR_DELETION,[
5491         #include "confdefs.h"
5492         #define NO_CONFIG_H
5493         #include "replace.h"
5494         #include "system/wait.h"
5495         #include "system/network.h"
5496         #include <talloc.h>
5497         #include <tdb.h>
5498         #include <ctdb.h>
5499         #include <ctdb_private.h>
5500         ])
5501         if test x"$ac_cv_have_CTDB_CONTROL_SCHEDULE_FOR_DELETION_decl" != x"yes"
5502         then
5503                 if test "x$enable_old_ctdb" = "xyes" ; then
5504                         AC_MSG_WARN([ignoring missing SCHEDULE_FOR_DELETION (--enable-old-ctdb)])
5505                 else
5506                         ctdb_broken="support for SCHEDULE_FOR_DELETION control missing"
5507                         have_cluster_support=no
5508                 fi
5509         fi
5510 fi
5511
5512 if test "x$have_cluster_support" = "xyes" ; then
5513         # In ctdb 1.0.57, ctdb_control_tcp was temporarily renamed
5514         # to ctdb_tcp_client.
5515         AC_CHECK_TYPE(struct ctdb_tcp_client,[
5516                 AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
5517         ],,[
5518         #include "confdefs.h"
5519         #define NO_CONFIG_H
5520         #include "replace.h"
5521         #include "system/wait.h"
5522         #include "system/network.h"
5523         #include <talloc.h>
5524         #include <tdb.h>
5525         #include <ctdb.h>
5526         #include <ctdb_private.h>
5527         ])
5528 fi
5529
5530 if test "x$have_cluster_support" = "xyes" ; then
5531         AC_CHECK_TYPE(struct ctdb_control_tcp,[
5532                 AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5533         ],[
5534                 ctdb_broken="missing struct ctdb_control_tcp"
5535                 have_cluster_support=no
5536         ],[
5537         #include "confdefs.h"
5538         #define NO_CONFIG_H
5539         #include "replace.h"
5540         #include "system/wait.h"
5541         #include "system/network.h"
5542         #include <talloc.h>
5543         #include <tdb.h>
5544         #include <ctdb.h>
5545         #include <ctdb_private.h>
5546         ])
5547 fi
5548
5549 # test for optional ipv6 support in ctdb:
5550 if test "x$have_cluster_support" = "xyes" ; then
5551         AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5552                 AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5553         ],,[
5554         #include "confdefs.h"
5555         #define NO_CONFIG_H
5556         #include "replace.h"
5557         #include "system/wait.h"
5558         #include "system/network.h"
5559         #include <talloc.h>
5560         #include <tdb.h>
5561         #include <ctdb.h>
5562         #include <ctdb_private.h>
5563         ])
5564 fi
5565
5566 CPPFLAGS="$SAVED_CPPFLAGS"
5567
5568 fi # (if test "$with_cluster_support" != "no")
5569
5570 if test x"$have_cluster_support" = "xno" ; then
5571         case "$with_cluster_support" in
5572         yes)
5573                 AC_MSG_ERROR(["cluster support not available: $ctdb_broken"])
5574                 ;;
5575         auto)
5576                 AC_MSG_WARN(["cluster support not available: $ctdb_broken"])
5577                 ;;
5578         esac
5579         with_cluster_support=no
5580 fi
5581
5582 if test "x$with_cluster_support" != "xno"; then
5583     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5584     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5585     AC_MSG_NOTICE(Building with cluster support)
5586 else
5587     AC_MSG_NOTICE(Building without cluster support)
5588 fi
5589
5590
5591 #################################################
5592 # check for rtnetlink
5593
5594 AC_CHECK_HEADERS([linux/netlink.h],
5595   AC_CHECK_HEADERS([linux/rtnetlink.h],[],[],
5596                    [#include <bits/sockaddr.h>
5597                     #include <linux/netlink.h>]),
5598   [],[#include <bits/sockaddr.h>])
5599
5600 #################################################
5601 # check for ACL support
5602
5603 AC_MSG_CHECKING(whether to support ACLs)
5604 AC_ARG_WITH(acl-support,
5605 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5606 [ case "$withval" in
5607         yes|no)
5608                 with_acl_support="$withval"
5609                 ;;
5610   esac ])
5611
5612 if test x"$with_acl_support" = x ; then
5613         with_acl_support="auto"
5614 fi
5615
5616 AC_MSG_RESULT($with_acl_support)
5617
5618 if test x"$with_acl_support" = x"no"; then
5619         AC_MSG_RESULT(Disabling ACL support)
5620         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5621 else
5622         AC_MSG_NOTICE(checking whether ACL support is available:)
5623         case "$host_os" in
5624         *sysv5*)
5625                 AC_MSG_NOTICE(Using UnixWare ACLs)
5626                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5627                 default_static_modules="$default_static_modules vfs_solarisacl"
5628                 ;;
5629         *solaris*)
5630                 AC_MSG_NOTICE(Using solaris ACLs)
5631                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5632                 ACL_LIBS="$ACL_LIBS -lsec"
5633                 default_static_modules="$default_static_modules vfs_solarisacl"
5634                 ;;
5635         *hpux*)
5636                 AC_MSG_NOTICE(Using HPUX ACLs)
5637                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5638                 default_static_modules="$default_static_modules vfs_hpuxacl"
5639                 ;;
5640         *irix*)
5641                 AC_MSG_NOTICE(Using IRIX ACLs)
5642                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5643                 default_static_modules="$default_static_modules vfs_irixacl"
5644                 ;;
5645         *aix*)
5646                 AC_MSG_NOTICE(Using AIX ACLs)
5647                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5648                 default_static_modules="$default_static_modules vfs_aixacl"
5649                 ;;
5650         *osf*)
5651                 AC_MSG_NOTICE(Using Tru64 ACLs)
5652                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5653                 ACL_LIBS="$ACL_LIBS -lpacl"
5654                 default_static_modules="$default_static_modules vfs_tru64acl"
5655                 ;;
5656         *darwin*)
5657                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5658                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5659                 ;;
5660         *)
5661                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5662                 case "$host_os" in
5663                 *linux*)
5664                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5665                         ;;
5666                 esac
5667                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5668                         acl_LIBS=$LIBS
5669                         LIBS="$LIBS $ACL_LIBS"
5670                         AC_TRY_LINK([
5671                                 #include <sys/types.h>
5672                                 #include <sys/acl.h>
5673                         ],[
5674                                 acl_t acl;
5675                                 int entry_id;
5676                                 acl_entry_t *entry_p;
5677                                 return acl_get_entry(acl, entry_id, entry_p);
5678                         ],
5679                         [samba_cv_HAVE_POSIX_ACLS=yes],
5680                         [samba_cv_HAVE_POSIX_ACLS=no])
5681                         LIBS=$acl_LIBS
5682                 ])
5683                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5684                         AC_MSG_NOTICE(Using posix ACLs)
5685                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5686                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5687                                 acl_LIBS=$LIBS
5688                                 LIBS="$LIBS $ACL_LIBS"
5689                                 AC_TRY_LINK([
5690                                         #include <sys/types.h>
5691                                         #include <sys/acl.h>
5692                                 ],[
5693                                         acl_permset_t permset_d;
5694                                         acl_perm_t perm;
5695                                         return acl_get_perm_np(permset_d, perm);
5696                                 ],
5697                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5698                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5699                                 LIBS=$acl_LIBS
5700                         ])
5701                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5702                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5703                         fi
5704                         default_static_modules="$default_static_modules vfs_posixacl"
5705                 else
5706                         AC_MSG_NOTICE(ACL support is not avaliable)
5707                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5708                 fi
5709                 ;;
5710         esac
5711 fi # with_acl_support
5712
5713 #################################################
5714 # check if we have FreeBSD sunacl
5715 case "$host_os" in
5716 *freebsd*)
5717     AC_CHECK_HEADER(sunacl.h)
5718     if test x"$ac_cv_header_sunacl_h" = xyes ; then
5719        AC_DEFINE(HAVE_FREEBSD_SUNACL_H,1,[Whether we have FreeBSD sunacl around])
5720        ZFSACL_LIBS=-lsunacl
5721        AC_SUBST(ZFSACL_LIBS)
5722        default_shared_modules="$default_shared_modules vfs_zfsacl"
5723     fi
5724     ;;
5725 esac
5726
5727 #################################################
5728 # check for AIO support
5729
5730 AC_MSG_CHECKING(whether to support asynchronous io)
5731 AC_ARG_WITH(aio-support,
5732 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5733 [ case "$withval" in
5734   yes)
5735
5736         AC_MSG_RESULT(yes)
5737         case "$host_os" in
5738         *)
5739                 AIO_LIBS=$LIBS
5740                 no_rt_LIBS=$LIBS
5741                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5742                 LIBS=$no_rt_LIBS
5743                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5744                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5745                 aio_LIBS=$LIBS
5746                 LIBS=$AIO_LIBS
5747                 AC_TRY_LINK([#include <sys/types.h>
5748 #include <aio.h>],
5749 [ struct aiocb a; return aio_read(&a);],
5750 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5751                 LIBS=$aio_LIBS])
5752                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5753                 aio_LIBS=$LIBS
5754                 LIBS=$AIO_LIBS
5755                 AC_TRY_LINK([#include <sys/types.h>
5756 #include <aio.h>],
5757 [ struct aiocb64 a; return aio_read64(&a);],
5758 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5759                 LIBS=$aio_LIBS])
5760                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5761                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5762                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5763                         LIBS=$AIO_LIBS
5764                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5765                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5766                         LIBS=$AIO_LIBS
5767                 fi
5768
5769                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5770                         AC_MSG_CHECKING(for aio_read)
5771                         AC_LINK_IFELSE([#include <aio.h>
5772 int main() { struct aiocb a; return aio_read(&a); }],
5773 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5774 [AC_MSG_RESULT(no)])
5775
5776                         AC_MSG_CHECKING(for aio_write)
5777                         AC_LINK_IFELSE([#include <aio.h>
5778 int main() { struct aiocb a; return aio_write(&a); }],
5779 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5780 [AC_MSG_RESULT(no)])
5781
5782                         AC_MSG_CHECKING(for aio_fsync)
5783                         AC_LINK_IFELSE([#include <aio.h>
5784 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5785 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5786 [AC_MSG_RESULT(no)])
5787
5788                         AC_MSG_CHECKING(for aio_return)
5789                         AC_LINK_IFELSE([#include <aio.h>
5790 int main() { struct aiocb a; return aio_return(&a); }],
5791 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5792 [AC_MSG_RESULT(no)])
5793
5794                         AC_MSG_CHECKING(for aio_error)
5795                         AC_LINK_IFELSE([#include <aio.h>
5796 int main() { struct aiocb a; return aio_error(&a); }],
5797 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5798 [AC_MSG_RESULT(no)])
5799
5800                         AC_MSG_CHECKING(for aio_cancel)
5801                         AC_LINK_IFELSE([#include <aio.h>
5802 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5803 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5804 [AC_MSG_RESULT(no)])
5805
5806                         AC_MSG_CHECKING(for aio_suspend)
5807                         AC_LINK_IFELSE([#include <aio.h>
5808 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5809 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5810 [AC_MSG_RESULT(no)])
5811                 fi
5812
5813                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5814                         AC_MSG_CHECKING(for aio_read64)
5815                         AC_LINK_IFELSE([#include <aio.h>
5816 int main() { struct aiocb a; return aio_read64(&a); }],
5817 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5818 [AC_MSG_RESULT(no)])
5819
5820                         AC_MSG_CHECKING(for aio_write64)
5821                         AC_LINK_IFELSE([#include <aio.h>
5822 int main() { struct aiocb a; return aio_write64(&a); }],
5823 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5824 [AC_MSG_RESULT(no)])
5825
5826                         AC_MSG_CHECKING(for aio_fsync64)
5827                         AC_LINK_IFELSE([#include <aio.h>
5828 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5829 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5830 [AC_MSG_RESULT(no)])
5831
5832                         AC_MSG_CHECKING(for aio_return64)
5833                         AC_LINK_IFELSE([#include <aio.h>
5834 int main() { struct aiocb a; return aio_return64(&a); }],
5835 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5836 [AC_MSG_RESULT(no)])
5837
5838                         AC_MSG_CHECKING(for aio_error64)
5839                         AC_LINK_IFELSE([#include <aio.h>
5840 int main() { struct aiocb a; return aio_error64(&a); }],
5841 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5842 [AC_MSG_RESULT(no)])
5843
5844                         AC_MSG_CHECKING(for aio_cancel64)
5845                         AC_LINK_IFELSE([#include <aio.h>
5846 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5847 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5848 [AC_MSG_RESULT(no)])
5849
5850                         AC_MSG_CHECKING(for aio_suspend64)
5851                         AC_LINK_IFELSE([#include <aio.h>
5852 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5853 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5854 [AC_MSG_RESULT(no)])
5855                 fi
5856             ;;
5857         esac
5858         ;;
5859   *)
5860     AC_MSG_RESULT(no)
5861     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5862     ;;
5863   esac ],
5864   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5865   AC_MSG_RESULT(no)
5866 )
5867
5868 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5869         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5870                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5871                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5872         fi
5873 fi
5874
5875 #################################################
5876 # check for sendfile support
5877
5878 with_sendfile_support=yes
5879 AC_MSG_CHECKING(whether to check to support sendfile)
5880 AC_ARG_WITH(sendfile-support,
5881 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5882 [ case "$withval" in
5883   yes)
5884
5885         AC_MSG_RESULT(yes);
5886
5887         case "$host_os" in
5888         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5889                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5890                 AC_TRY_LINK([#include <sys/sendfile.h>],
5891 [\
5892 int tofd, fromfd;
5893 off64_t offset;
5894 size_t total;
5895 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5896 ],
5897 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5898
5899                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5900                 AC_TRY_LINK([#include <sys/sendfile.h>],
5901 [\
5902 int tofd, fromfd;
5903 off_t offset;
5904 size_t total;
5905 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5906 ],
5907 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5908
5909 # Try and cope with broken Linux sendfile....
5910                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5911                 AC_TRY_LINK([\
5912 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5913 #undef _FILE_OFFSET_BITS
5914 #endif
5915 #include <sys/sendfile.h>],
5916 [\
5917 int tofd, fromfd;
5918 off_t offset;
5919 size_t total;
5920 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5921 ],
5922 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5923
5924         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5925                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5926                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5927                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5928         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5929                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5930                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5931                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5932         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5933                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5934                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5935         else
5936                 AC_MSG_RESULT(no);
5937         fi
5938
5939         ;;
5940         *freebsd* | *dragonfly* )
5941                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5942                 AC_TRY_LINK([\
5943 #include <sys/types.h>
5944 #include <unistd.h>
5945 #include <sys/socket.h>
5946 #include <sys/uio.h>],
5947 [\
5948         int fromfd, tofd, ret, total=0;
5949         off_t offset, nwritten;
5950         struct sf_hdtr hdr;
5951         struct iovec hdtrl;
5952         hdr.headers = &hdtrl;
5953         hdr.hdr_cnt = 1;
5954         hdr.trailers = NULL;
5955         hdr.trl_cnt = 0;
5956         hdtrl.iov_base = NULL;
5957         hdtrl.iov_len = 0;
5958         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5959 ],
5960 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5961
5962         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5963                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5964                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5965                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5966         else
5967                 AC_MSG_RESULT(no);
5968         fi
5969         ;;
5970
5971         *hpux*)
5972                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5973                 AC_TRY_LINK([\
5974 #include <sys/socket.h>
5975 #include <sys/uio.h>],
5976 [\
5977         int fromfd, tofd;
5978         size_t total=0;
5979         struct iovec hdtrl[2];
5980         ssize_t nwritten;
5981         off64_t offset;
5982
5983         hdtrl[0].iov_base = 0;
5984         hdtrl[0].iov_len = 0;
5985
5986         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5987 ],
5988 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5989         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5990                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5991                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5992                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5993         else
5994                 AC_MSG_RESULT(no);
5995         fi
5996
5997                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5998                 AC_TRY_LINK([\
5999 #include <sys/socket.h>
6000 #include <sys/uio.h>],
6001 [\
6002         int fromfd, tofd;
6003         size_t total=0;
6004         struct iovec hdtrl[2];
6005         ssize_t nwritten;
6006         off_t offset;
6007
6008         hdtrl[0].iov_base = 0;
6009         hdtrl[0].iov_len = 0;
6010
6011         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
6012 ],
6013 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
6014         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
6015                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
6016                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
6017                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
6018         else
6019                 AC_MSG_RESULT(no);
6020         fi
6021         ;;
6022
6023         *solaris*)
6024                 AC_CHECK_LIB(sendfile,sendfilev)
6025                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
6026                 AC_TRY_LINK([\
6027 #include <sys/sendfile.h>],
6028 [\
6029         int sfvcnt;
6030         size_t xferred;
6031         struct sendfilevec vec[2];
6032         ssize_t nwritten;
6033         int tofd;
6034
6035         sfvcnt = 2;
6036
6037         vec[0].sfv_fd = SFV_FD_SELF;
6038         vec[0].sfv_flag = 0;
6039         vec[0].sfv_off = 0;
6040         vec[0].sfv_len = 0;
6041
6042         vec[1].sfv_fd = 0;
6043         vec[1].sfv_flag = 0;
6044         vec[1].sfv_off = 0;
6045         vec[1].sfv_len = 0;
6046         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
6047 ],
6048 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
6049
6050         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
6051                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
6052                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
6053                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
6054         else
6055                 AC_MSG_RESULT(no);
6056         fi
6057
6058                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
6059                 AC_TRY_LINK([\
6060 #include <sys/sendfile.h>],
6061 [\
6062         int sfvcnt;
6063         size_t xferred;
6064         struct sendfilevec vec[2];
6065         ssize_t nwritten;
6066         int tofd;
6067
6068         sfvcnt = 2;
6069
6070         vec[0].sfv_fd = SFV_FD_SELF;
6071         vec[0].sfv_flag = 0;
6072         vec[0].sfv_off = 0;
6073         vec[0].sfv_len = 0;
6074
6075         vec[1].sfv_fd = 0;
6076         vec[1].sfv_flag = 0;
6077         vec[1].sfv_off = 0;
6078         vec[1].sfv_len = 0;
6079         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
6080 ],
6081 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
6082
6083         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
6084                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
6085                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
6086                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
6087         else
6088                 AC_MSG_RESULT(no);
6089         fi
6090         ;;
6091         *aix*)
6092                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
6093                 AC_TRY_LINK([\
6094 #include <sys/socket.h>],
6095 [\
6096         int fromfd, tofd;
6097         size_t total=0;
6098         struct sf_parms hdtrl;
6099         ssize_t nwritten;
6100         off64_t offset;
6101
6102         hdtrl.header_data = 0;
6103         hdtrl.header_length = 0;
6104         hdtrl.file_descriptor = fromfd;
6105         hdtrl.file_offset = 0;
6106         hdtrl.file_bytes = 0;
6107         hdtrl.trailer_data = 0;
6108         hdtrl.trailer_length = 0;
6109
6110         nwritten = send_file(&tofd, &hdtrl, 0);
6111 ],
6112 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
6113         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
6114                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
6115                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
6116                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
6117         else
6118                 AC_MSG_RESULT(no);
6119         fi
6120         ;;
6121         *)
6122         ;;
6123         esac
6124         ;;
6125   *)
6126     AC_MSG_RESULT(no)
6127     ;;
6128   esac ],
6129   AC_MSG_RESULT(yes)
6130 )
6131
6132 ############################################
6133 # See if we have the Linux readahead syscall.
6134
6135 AC_CACHE_CHECK([for Linux readahead],
6136                 samba_cv_HAVE_LINUX_READAHEAD,[
6137     AC_TRY_LINK([
6138 #if defined(HAVE_UNISTD_H)
6139 #include <unistd.h>
6140 #endif
6141 #include <fcntl.h>],
6142     [ssize_t err = readahead(0,0,0x80000);],
6143     samba_cv_HAVE_LINUX_READAHEAD=yes,
6144     samba_cv_HAVE_LINUX_READAHEAD=no)])
6145
6146 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
6147   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
6148              [Whether Linux readahead is available])
6149 fi
6150
6151 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
6152
6153 ############################################
6154 # See if we have the posix_fadvise syscall.
6155
6156 AC_CACHE_CHECK([for posix_fadvise],
6157                 samba_cv_HAVE_POSIX_FADVISE,[
6158     AC_TRY_LINK([
6159 #if defined(HAVE_UNISTD_H)
6160 #include <unistd.h>
6161 #endif
6162 #include <fcntl.h>],
6163     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
6164     samba_cv_HAVE_POSIX_FADVISE=yes,
6165     samba_cv_HAVE_POSIX_FADVISE=no)])
6166
6167 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
6168   AC_DEFINE(HAVE_POSIX_FADVISE,1,
6169              [Whether posix_fadvise is available])
6170 fi
6171
6172 ############################################
6173 # See if we have the Linux splice syscall.
6174
6175 case "$host_os" in
6176 *linux*)
6177 AC_CACHE_CHECK([for Linux splice],
6178                 samba_cv_HAVE_LINUX_SPLICE,[
6179     AC_TRY_LINK([
6180 #if defined(HAVE_UNISTD_H)
6181 #include <unistd.h>
6182 #endif
6183 #include <fcntl.h>],
6184     [long ret = splice(0,0,1,0,400,0);],
6185     samba_cv_HAVE_LINUX_SPLICE=yes,
6186     samba_cv_HAVE_LINUX_SPLICE=no)])
6187 ;;
6188 *)
6189 samba_cv_HAVE_LINUX_SPLICE=no
6190 ;;
6191 esac
6192
6193 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
6194   AC_DEFINE(HAVE_LINUX_SPLICE,1,
6195              [Whether Linux splice is available])
6196 fi
6197
6198 AC_HAVE_DECL(splice, [#include <fcntl.h>])
6199
6200 ############################################
6201 # See if we have the a broken readlink syscall.
6202
6203 AC_CACHE_CHECK([for a broken readlink syscall],samba_cv_HAVE_BROKEN_READLINK,[
6204 AC_TRY_RUN([#include "${srcdir-.}/../tests/readlink.c"],
6205         samba_cv_HAVE_BROKEN_READLINK=no,samba_cv_HAVE_BROKEN_READLINK=yes,samba_cv_HAVE_BROKEN_READLINK=cross)
6206 ])
6207 if test x"$samba_cv_HAVE_BROKEN_READLINK" = x"yes"; then
6208         AC_DEFINE(HAVE_BROKEN_READLINK,1,[Whether the readlink syscall is broken])
6209 fi
6210
6211 #################################################
6212 # Check whether winbind is supported on this platform.  If so we need to
6213 # build and install client programs, sbin programs and shared libraries
6214
6215 AC_MSG_CHECKING(whether to build winbind)
6216
6217 # Initially, the value of $host_os decides whether winbind is supported
6218
6219 HAVE_WINBIND=yes
6220 HAVE_WBCLIENT=no
6221
6222 # Define external wbclient library to link against.  This disables winbind.
6223 # We define this here so --with-winbind can override it.
6224 AC_ARG_WITH(wbclient,
6225 [AS_HELP_STRING([--with-wbclient], [Use external wbclient (optional)])],
6226 [
6227   case "$withval" in
6228         no)
6229                 HAVE_WBCLIENT=no
6230                 ;;
6231         yes)
6232                 HAVE_WBCLIENT=yes
6233                 HAVE_WINBIND=no
6234                 ;;
6235         *)
6236                 HAVE_WBCLIENT=yes
6237                 HAVE_WINBIND=no
6238                 WBCLIENT_INCLUDES="-I$withval/include"
6239                 WBCLIENT_LDFLAGS="-L$withval/lib"
6240                 ;;
6241   esac ],
6242 )
6243
6244 AC_SUBST(WBCLIENT_INCLUDES)
6245 AC_SUBST(WBCLIENT_LDFLAGS)
6246 AC_SUBST(WBCLIENT_LIBS)
6247
6248
6249 # Define the winbind shared library name and any specific linker flags
6250 # it needs to be built with.
6251
6252 WINBIND_NSS="../nsswitch/libnss_winbind.$SHLIBEXT"
6253 WINBIND_WINS_NSS="../nsswitch/libnss_wins.$SHLIBEXT"
6254 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
6255 NSSSONAMEVERSIONSUFFIX=""
6256
6257 case "$host_os" in
6258         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
6259                 NSSSONAMEVERSIONSUFFIX=".2"
6260                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_linux.o"
6261                 ;;
6262         *freebsd[[5-9]]*)
6263                 # FreeBSD winbind client is implemented as a wrapper around
6264                 # the Linux version.
6265                 NSSSONAMEVERSIONSUFFIX=".1"
6266                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_freebsd.o \
6267                     ../nsswitch/winbind_nss_linux.o"
6268                 WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
6269                 WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
6270                 ;;
6271
6272         *netbsd*[[3-9]]*)
6273                 # NetBSD winbind client is implemented as a wrapper
6274                 # around the Linux version. It needs getpwent_r() to
6275                 # indicate libc's use of the correct nsdispatch API.
6276                 #
6277                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
6278                         WINBIND_NSS_EXTRA_OBJS="\
6279                             ../nsswitch/winbind_nss_netbsd.o \
6280                             ../nsswitch/winbind_nss_linux.o"
6281                         WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
6282                         WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
6283                 else
6284                         HAVE_WINBIND=no
6285                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
6286                 fi
6287                 ;;
6288         *irix*)
6289                 # IRIX has differently named shared libraries
6290                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_irix.o"
6291                 WINBIND_NSS="../nsswitch/libns_winbind.$SHLIBEXT"
6292                 WINBIND_WINS_NSS="../nsswitch/libns_wins.$SHLIBEXT"
6293                 ;;
6294         *solaris*)
6295                 # Solaris winbind client is implemented as a wrapper around
6296                 # the Linux version.
6297                 NSSSONAMEVERSIONSUFFIX=".1"
6298                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o \
6299                     ../nsswitch/winbind_nss_linux.o"
6300                 ;;
6301         *hpux11*)
6302                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o"
6303                 ;;
6304         *aix*)
6305                 # AIX has even differently named shared libraries.  No
6306                 # WINS support has been implemented yet.
6307                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_aix.o"
6308                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
6309                 WINBIND_NSS="../nsswitch/WINBIND"
6310                 WINBIND_WINS_NSS=""
6311                 ;;
6312         *)
6313                 HAVE_WINBIND=no
6314                 winbind_no_reason=", unsupported on $host_os"
6315                 ;;
6316 esac
6317
6318 # Check the setting of --with-winbind
6319
6320 AC_ARG_WITH(winbind,
6321 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
6322 [
6323   case "$withval" in
6324         yes)
6325                 HAVE_WINBIND=yes
6326                 HAVE_WBCLIENT=no
6327                 ;;
6328         no)
6329                 HAVE_WINBIND=no
6330                 winbind_reason=""
6331                 ;;
6332   esac ],
6333 )
6334
6335 # We need unix domain sockets for winbind
6336
6337 if test x"$HAVE_WINBIND" = x"yes"; then
6338         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
6339                 winbind_no_reason=", no unix domain socket support on $host_os"
6340                 HAVE_WINBIND=no
6341         fi
6342 fi
6343
6344 # Display test results
6345
6346 if test x"$HAVE_WINBIND" = x"no"; then
6347         WINBIND_NSS=""
6348         WINBIND_WINS_NSS=""
6349 fi
6350 if test x"$HAVE_WBCLIENT" = x"yes"; then
6351         AC_CHECK_LIB(wbclient, wbcInterfaceDetails,
6352                      [LIBWBCLIENT_LIBS="-lwbclient"], AC_MSG_ERROR([Could not find wbclient]), [$WBCLIENT_LDFLAGS])
6353         LIBWBCLIENT_LIBS="$LIBWBCLIENT_LIBS $WBCLIENT_LDFLAGS"
6354         AC_MSG_RESULT(yes)
6355         AC_DEFINE(WITH_WINBIND,1,[Whether to link to wbclient])
6356         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6357 else
6358         if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
6359                 BUILD_LIBWBCLIENT_SHARED=no
6360         else
6361                 BUILD_LIBWBCLIENT_SHARED=yes
6362         fi
6363
6364         LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
6365         LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
6366         LIBWBCLIENT_SOVER=0
6367         if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
6368                 NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6369                 ## Only worry about libwbclient if we have shared
6370                 # library support
6371                 LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
6372                 LIBWBCLIENT=libwbclient
6373                 INSTALL_LIBWBCLIENT=installlibwbclient
6374                 UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
6375                 LIBWBCLIENT_LIBS="-lwbclient"
6376         else
6377                 LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
6378                 LIBWBCLIENT_LIBS=$LIBWBCLIENT_STATIC_TARGET
6379         fi
6380 fi
6381
6382 if test x"$HAVE_WINBIND" = x"yes"; then
6383         AC_MSG_RESULT(yes)
6384         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6385
6386         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6387         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6388         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6389                 PAM_MODULES="$PAM_MODULES pam_winbind"
6390                 INSTALL_PAM_MODULES="installpammodules"
6391                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6392         fi
6393
6394         # we use winbind, check for krb5 locate_plugin support:
6395         AC_CHECK_HEADERS([krb5/locate_plugin.h], [], [],
6396                 [[#ifdef HAVE_KRB5_H
6397                  #include <krb5.h>
6398                  #endif
6399         ]])
6400         if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
6401                 WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
6402                 if test x"$BLDSHARED" = x"true" ; then
6403                         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
6404                 fi
6405         fi
6406         # end of krb5 locate_plugin check
6407 else
6408         AC_MSG_RESULT(no$winbind_no_reason)
6409 fi
6410
6411 AC_SUBST(WINBIND_NSS)
6412 AC_SUBST(WINBIND_WINS_NSS)
6413 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
6414 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
6415 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
6416
6417 AC_SUBST(WINBIND_KRB5_LOCATOR)
6418
6419 # Solaris 10 does have new member in nss_XbyY_key
6420 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6421                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6422                 [#include <nss_dbdefs.h>])
6423
6424 # Solaris has some extra fields in struct passwd that need to be
6425 # initialised otherwise nscd crashes.
6426
6427 AC_CHECK_MEMBER(struct passwd.pw_comment,
6428                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6429                 [#include <pwd.h>])
6430
6431 AC_CHECK_MEMBER(struct passwd.pw_age,
6432                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6433                 [#include <pwd.h>])
6434
6435 # AIX 4.3.x and 5.1 do not have as many members in
6436 # struct secmethod_table as AIX 5.2
6437 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6438        [#include <usersec.h>])
6439 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6440        [#include <usersec.h>])
6441
6442 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6443 AC_TRY_COMPILE([#include <sys/types.h>
6444 #include <sys/socket.h>],
6445 [struct ucred cred;
6446  socklen_t cred_len;
6447  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6448 ],
6449 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6450 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6451     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6452 fi
6453
6454 AC_CACHE_CHECK([for getpeereid],samba_cv_HAVE_GETPEEREID,[
6455 AC_TRY_LINK([#include <sys/types.h>
6456 #include <unistd.h>],
6457 [uid_t uid; gid_t gid; int ret;
6458  ret = getpeereid(0, &uid, &gid);
6459 ],
6460 samba_cv_HAVE_GETPEEREID=yes,samba_cv_HAVE_GETPEEREID=no)])
6461 if test x"$samba_cv_HAVE_GETPEEREID" = xyes; then
6462    AC_DEFINE(HAVE_GETPEEREID,1,
6463              [Whether we have getpeereid to get socket credentials])
6464 fi
6465
6466
6467 #################################################
6468 # Check to see if we should use the included popt
6469
6470 AC_ARG_WITH(included-popt,
6471 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
6472 [
6473   case "$withval" in
6474         yes)
6475                 INCLUDED_POPT=yes
6476                 ;;
6477         no)
6478                 INCLUDED_POPT=no
6479                 ;;
6480   esac ],
6481 )
6482 if test x"$INCLUDED_POPT" != x"yes"; then
6483     AC_CHECK_LIB(popt, poptGetContext,
6484                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6485 fi
6486
6487 AC_MSG_CHECKING(whether to use included popt)
6488 if test x"$INCLUDED_POPT" = x"yes"; then
6489     AC_MSG_RESULT(yes)
6490     BUILD_POPT='$(POPT_OBJ)'
6491     POPTLIBS='$(POPT_OBJ)'
6492     FLAGS1="-I\$(srcdir)/../lib/popt"
6493 else
6494     AC_MSG_RESULT(no)
6495         BUILD_POPT=""
6496     POPTLIBS="-lpopt"
6497 fi
6498 AC_SUBST(BUILD_POPT)
6499 AC_SUBST(POPTLIBS)
6500 AC_SUBST(FLAGS1)
6501
6502 #################################################
6503 # Check if user wants DNS service discovery support
6504
6505 AC_ARG_ENABLE(dnssd,
6506 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=no)])])
6507
6508 AC_SUBST(DNSSD_LIBS)
6509 if test x"$enable_dnssd" = x"yes"; then
6510     have_dnssd_support=yes
6511
6512     AC_CHECK_HEADERS(dns_sd.h)
6513     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6514         have_dnssd_support=no
6515     fi
6516
6517     # On Darwin the DNSSD API is in libc, but on other platforms it's
6518     # probably in -ldns_sd
6519     AC_CHECK_FUNCS(DNSServiceRegister)
6520     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6521     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6522             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6523         have_dnssd_support=no
6524     fi
6525
6526     if test x"$have_dnssd_support" = x"yes"; then
6527         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6528                 [Whether to enable DNS service discovery support])
6529     else
6530         if test x"$enable_dnssd" = x"yes"; then
6531             AC_MSG_ERROR(DNS service discovery support not available)
6532         fi
6533     fi
6534
6535 fi
6536
6537 #################################################
6538 # Check if user wants avahi support
6539
6540 AC_ARG_ENABLE(avahi,
6541 [AS_HELP_STRING([--enable-avahi], [Enable Avahi support (default=auto)])])
6542
6543 if test x"$enable_avahi" != x"no"; then
6544     have_avahi_support=yes
6545
6546     AC_CHECK_HEADERS(avahi-common/watch.h)
6547     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6548         have_avahi_support=no
6549     fi
6550
6551     AC_CHECK_HEADERS(avahi-client/client.h)
6552     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6553         have_avahi_support=no
6554     fi
6555
6556     save_LIBS="$LIBS"
6557     AC_CHECK_LIB(avahi-client, avahi_client_new,[have_avahi_client_new=yes])
6558     AC_CHECK_LIB(avahi-common, avahi_strerror,[have_avahi_strerror=yes])
6559     LIBS="$save_LIBS"
6560
6561     if test x"$have_avahi_client_new" != x"yes" -o \
6562        x"$have_avahi_strerror" != x"yes" ; then
6563         have_avahi_support=no
6564     fi
6565
6566     if test x"$have_avahi_support" = x"yes"; then
6567         AC_SUBST(AVAHI_LIBS, "-lavahi-client -lavahi-common")
6568         AC_DEFINE(WITH_AVAHI_SUPPORT, 1,
6569                 [Whether to enable avahi support])
6570         AC_SUBST(AVAHI_OBJ, "lib/avahi.o smbd/avahi_register.o")
6571     else
6572         if test x"$enable_avahi" = x"yes"; then
6573             AC_MSG_ERROR(avahi support not available)
6574         fi
6575     fi
6576 fi
6577
6578
6579 #################################################
6580 # Set pthread stuff
6581
6582 PTHREAD_CFLAGS=error
6583 PTHREAD_LDFLAGS=error
6584
6585 # If it's error, then the user didn't 
6586 # define it.
6587 if test "x$PTHREAD_LDFLAGS" = xerror; then
6588   AC_CHECK_LIB(pthread, pthread_attr_init, [
6589              PTHREAD_CFLAGS="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
6590              PTHREAD_LDFLAGS="-lpthread" ])
6591 fi
6592
6593 if test "x$PTHREAD_LDFLAGS" = xerror; then
6594   AC_CHECK_LIB(pthreads, pthread_attr_init, [
6595              PTHREAD_CFLAGS="-D_THREAD_SAFE"
6596              PTHREAD_LDFLAGS="-lpthreads" ])
6597 fi
6598
6599 if test "x$PTHREAD_LDFLAGS" = xerror; then
6600    AC_CHECK_LIB(c_r, pthread_attr_init, [
6601                 PTHREAD_CFLAGS="-D_THREAD_SAFE -pthread"
6602                 PTHREAD_LDFLAGS="-pthread" ])
6603 fi
6604
6605 if test "x$PTHREAD_LDFLAGS" = xerror; then
6606    AC_CHECK_FUNC(pthread_attr_init, [
6607                  PTHREAD_CFLAGS="-D_REENTRANT"
6608                  PTHREAD_LDFLAGS="-lpthread" ])
6609 fi
6610
6611 # especially for HP-UX, where the AC_CHECK_FUNC macro fails to test for
6612 # pthread_attr_init. On pthread_mutex_lock it works there...
6613 if test "x$PTHREAD_LDFLAGS" = xerror; then
6614    AC_CHECK_LIB(pthread, pthread_mutex_lock, [
6615                 PTHREAD_CFLAGS="-D_REENTRANT"
6616                 PTHREAD_LDFLAGS="-lpthread" ])
6617 fi
6618
6619 AC_SUBST(PTHREAD_CFLAGS)
6620 AC_SUBST(PTHREAD_LDFLAGS)
6621
6622 samba_cv_HAVE_PTHREAD=no
6623 if test x"$PTHREAD_CFLAGS" != xerror -a x"$PTHREAD_LDFLAGS" != xerror; then
6624         samba_cv_HAVE_PTHREAD=yes
6625         # now check for pthread.h with pthread-correct CFLAGS and LDFLAGS:
6626         ac_save_CFLAGS=$CFLAGS
6627         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6628         ac_save_LDFLAGS=$LDFLAGS
6629         LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
6630         AC_CHECK_HEADERS(pthread.h)
6631         CFLAGS=$ac_save_CFLAGS
6632         LDFLAGS=$ac_save_LDFLAGS
6633         AC_DEFINE(HAVE_PTHREAD, 1, [Do we have pthreads around?])
6634 fi
6635
6636 #################################################
6637 # Check if user wants pthreadpool support
6638
6639 AC_ARG_ENABLE(pthreadpool,
6640 [AS_HELP_STRING([--enable-pthreadpool], [Enable pthreads pool helper support (default=no)])])
6641
6642 if test x"$enable_pthreadpool" = xyes -a x"$samba_cv_HAVE_PTHREAD" != x"yes"; then
6643         AC_MSG_ERROR([pthreadpool support cannot be enabled when pthread support was not found])
6644 fi
6645
6646 if test x"$enable_pthreadpool" = x"yes" -a x"$samba_cv_HAVE_PTHREAD" = x"yes"; then
6647     LIBS="$LIBS $PTHREAD_LDFLAGS"
6648     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6649     AC_DEFINE(WITH_PTHREADPOOL, 1, [Whether to include pthreadpool helpers])
6650     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool.o")
6651 fi
6652
6653 #################################################
6654 # Check to see if we should use the included iniparser
6655
6656 AC_ARG_WITH(included-iniparser,
6657 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6658 [
6659   case "$withval" in
6660         yes)
6661                 INCLUDED_INIPARSER=yes
6662                 ;;
6663         no)
6664                 INCLUDED_INIPARSER=no
6665                 ;;
6666   esac ],
6667 )
6668 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6669     AC_CHECK_LIB(iniparser, iniparser_load,
6670                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6671 fi
6672
6673 AC_MSG_CHECKING(whether to use included iniparser)
6674 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6675     AC_MSG_RESULT(yes)
6676     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6677         INIPARSERLIBS=""
6678     FLAGS1="$FLAGS1 -I\$(srcdir)/../lib/iniparser/src"
6679 else
6680     AC_MSG_RESULT(no)
6681         BUILD_INIPARSER=""
6682     INIPARSERLIBS="-liniparser"
6683 fi
6684 AC_SUBST(BUILD_INIPARSER)
6685 AC_SUBST(INIPARSERLIBS)
6686 AC_SUBST(FLAGS1)
6687
6688 ###################################################
6689 # Check for different/missing (set|get|end)netgrent prototypes
6690 CFLAGS_SAVE=$CFLAGS
6691 if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
6692         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6693 fi
6694 AC_CACHE_CHECK([for setnetgrent prototype],samba_cv_setnetgrent_prototype, [
6695     AC_TRY_COMPILE([#include<netdb.h>
6696                     #ifdef HAVE_NETGROUP_H
6697                     #include<netgroup.h>
6698                     #endif],[setnetgrent("foo")],
6699                     samba_cv_setnetgrent_prototype=yes, samba_cv_setnetgrent_prototype=no)])
6700 if test x"$samba_cv_setnetgrent_prototype" = x"yes"; then
6701     AC_DEFINE(HAVE_SETNETGRENT_PROTOTYPE, 1, [If setnetgrent prototype is defined])
6702 fi
6703 AC_CACHE_CHECK([for getnetgrent prototype],samba_cv_getnetgrent_prototype, [
6704     AC_TRY_COMPILE([#include<netdb.h>
6705                     #ifdef HAVE_NETGROUP_H
6706                     #include<netgroup.h>
6707                     #endif],[char *dom, *user,*host; getnetgrent(&dom,&user,&host)],
6708                     samba_cv_getnetgrent_prototype=yes, samba_cv_getnetgrent_prototype=no)])
6709 if test x"$samba_cv_getnetgrent_prototype" = x"yes"; then
6710     AC_DEFINE(HAVE_GETNETGRENT_PROTOTYPE, 1, [If getnetgrent prototype is defined])
6711 fi
6712 AC_CACHE_CHECK([for endnetgrent prototype],samba_cv_endnetgrent_prototype, [
6713     AC_TRY_COMPILE([#include<netdb.h>
6714                     #ifdef HAVE_NETGROUP_H
6715                     #include<netgroup.h>
6716                     #endif],[endnetgrent()],
6717                     samba_cv_endnetgrent_prototype=yes, samba_cv_endnetgrent_prototype=no)])
6718 if test x"$samba_cv_endnetgrent_prototype" = x"yes"; then
6719     AC_DEFINE(HAVE_ENDNETGRENT_PROTOTYPE, 1, [If endnetgrent prototype is defined])
6720 fi
6721
6722 CFLAGS=$CFLAGS_SAVE
6723
6724 # Checks for the vfs_fileid module
6725 # Start
6726 AC_CHECK_FUNC(getmntent)
6727
6728 AC_CHECK_HEADERS(sys/statfs.h)
6729
6730 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
6731 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6732              AC_TRY_RUN([
6733                 #include <sys/types.h>
6734                 #include <sys/statfs.h>
6735                 int main(void)
6736                 {
6737                         struct statfs fsd;
6738                         fsid_t fsid = fsd.f_fsid;
6739                         return statfs (".", &fsd);
6740                 }],
6741                 vfsfileid_cv_statfs=yes,
6742                 vfsfileid_cv_statfs=no,
6743                 vfsfileid_cv_statfs=cross)
6744 ])
6745 AC_MSG_RESULT($vfsfileid_cv_statfs)
6746
6747 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6748         x"$vfsfileid_cv_statfs" = x"yes"; then
6749         default_shared_modules="$default_shared_modules vfs_fileid"
6750 fi
6751 # End
6752 # Checks for the vfs_fileid module
6753
6754
6755 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6756 do
6757         eval MODULE_DEFAULT_$i=STATIC
6758 done
6759
6760 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6761 do
6762         dnl Fall back to static if we cannot build shared libraries
6763         eval MODULE_DEFAULT_$i=STATIC
6764
6765         if test $BLDSHARED = true; then
6766                 eval MODULE_DEFAULT_$i=SHARED
6767         fi
6768 done
6769
6770 dnl Always build these modules static
6771 MODULE_rpc_spoolss=STATIC
6772 MODULE_rpc_srvsvc=STATIC
6773 MODULE_idmap_tdb=STATIC
6774 MODULE_idmap_passdb=STATIC
6775 MODULE_idmap_nss=STATIC
6776
6777 MODULE_nss_info_template=STATIC
6778
6779 AC_ARG_WITH(static-modules,
6780 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6781 [ if test $withval; then
6782         for i in `echo $withval | sed -e 's/,/ /g'`
6783         do
6784                 eval MODULE_$i=STATIC
6785         done
6786 fi ])
6787
6788 AC_ARG_WITH(shared-modules,
6789 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6790 [ if test $withval; then
6791         for i in `echo $withval | sed -e 's/,/ /g'`
6792         do
6793                         eval MODULE_$i=SHARED
6794         done
6795 fi ])
6796
6797 if test x"$MODULE_DEFAULT_vfs_notify_fam" = xSTATIC -o \
6798                 x"$MODULE_vfs_notify_fam" = xSTATIC ; then
6799         SMBD_FAM_LIBS="$SMB_FAM_LIBS"
6800         AC_SUBST(SMBD_FAM_LIBS)
6801 fi
6802
6803 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o passdb/pdb_ipa.o,
6804                    "bin/ldapsam.$SHLIBEXT", PDB,
6805                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6806 SMB_MODULE(pdb_ads, passdb/pdb_ads.o \$(TLDAP_OBJ), "bin/ads.$SHLIBEXT", PDB)
6807 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6808 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6809 SMB_MODULE(pdb_wbc_sam, passdb/pdb_wbc_sam.o, "bin/wbc_sam.$SHLIBEXT", PDB)
6810 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6811
6812 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6813 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6814 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6815 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6816 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6817 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6818 SMB_MODULE(idmap_autorid, winbindd/idmap_autorid.o, "bin/autorid.$SHLIBEXT", IDMAP)
6819 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6820 SMB_MODULE(idmap_hash, \$(IDMAP_HASH_OBJ), "bin/hash.$SHLIBEXT", IDMAP)
6821 SMB_MODULE(idmap_adex, \$(IDMAP_ADEX_OBJ), "bin/adex.$SHLIBEXT", IDMAP)
6822 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6823
6824 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6825 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6826
6827 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6828 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6829 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6830 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6831 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6832
6833 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6834 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6835 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6836 SMB_MODULE(auth_wbc, \$(AUTH_WBC_OBJ), "bin/wbc.$SHLIBEXT", AUTH)
6837 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6838 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6839 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6840 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6841 SMB_MODULE(auth_netlogond, \$(AUTH_NETLOGOND_OBJ), "bin/netlogond.$SHLIBEXT", AUTH)
6842 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6843
6844 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6845 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6846 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6847 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6848 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6849 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6850 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6851 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6852 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6853 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6854 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6855 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6856 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6857 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6858 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6859 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6860 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6861 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6862 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6863 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6864 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6865 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6866 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6867 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6868 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6869 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6870 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6871 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6872 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6873 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6874 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6875 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6876 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6877 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6878 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6879 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6880 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6881 SMB_MODULE(vfs_acl_xattr, \$(VFS_ACL_XATTR_OBJ), "bin/acl_xattr.$SHLIBEXT", VFS)
6882 SMB_MODULE(vfs_acl_tdb, \$(VFS_ACL_TDB_OBJ), "bin/acl_tdb.$SHLIBEXT", VFS)
6883 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6884 SMB_MODULE(vfs_onefs, \$(VFS_ONEFS), "bin/onefs.$SHLIBEXT", VFS)
6885 SMB_MODULE(vfs_onefs_shadow_copy, \$(VFS_ONEFS_SHADOW_COPY), "bin/onefs_shadow_copy.$SHLIBEXT", VFS)
6886 SMB_MODULE(vfs_dirsort, \$(VFS_DIRSORT_OBJ), "bin/dirsort.$SHLIBEXT", VFS)
6887 SMB_MODULE(vfs_scannedonly, \$(VFS_SCANNEDONLY_OBJ), "bin/scannedonly.$SHLIBEXT", VFS)
6888 SMB_MODULE(vfs_crossrename, \$(VFS_CROSSRENAME_OBJ), "bin/crossrename.$SHLIBEXT", VFS)
6889 SMB_MODULE(vfs_linux_xfs_sgid, \$(VFS_LINUX_XFS_SGID_OBJ), "bin/linux_xfs_sgid.$SHLIBEXT", VFS)
6890 SMB_MODULE(vfs_time_audit, \$(VFS_TIME_AUDIT_OBJ), "bin/time_audit.$SHLIBEXT", VFS)
6891
6892 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6893
6894 SMB_MODULE(perfcount_onefs, \$(PERFCOUNT_ONEFS), "bin/pc_onefs.$SHLIBEXT", PERFCOUNT)
6895 SMB_MODULE(perfcount_test, \$(PERFCOUNT_TEST), "bin/pc_test.$SHLIBEXT", PERFCOUNT)
6896 SMB_SUBSYSTEM(PERFCOUNT,smbd/perfcount.o)
6897
6898 SMB_MODULE(gpext_registry, libgpo/gpext/registry.o, "bin/registry.$SHLIBEXT", GPEXT)
6899 SMB_MODULE(gpext_scripts, libgpo/gpext/scripts.o, "bin/scripts.$SHLIBEXT", GPEXT)
6900 SMB_MODULE(gpext_security, libgpo/gpext/security.o, "bin/security.$SHLIBEXT", GPEXT)
6901 SMB_SUBSYSTEM(GPEXT, libgpo/gpext/gpext.o)
6902
6903 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6904
6905 #################################################
6906 # do extra things if we are running insure
6907
6908 if test "${ac_cv_prog_CC}" = "insure"; then
6909         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6910 fi
6911
6912 #################################################
6913 # If run from the build farm, enable NASTY hacks
6914 #################################################
6915 AC_MSG_CHECKING(whether to enable build farm hacks)
6916 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6917         AC_MSG_RESULT(yes)
6918         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6919 else
6920         AC_MSG_RESULT(no)
6921 fi
6922
6923 #################################################
6924 # check for bad librt/libpthread interactions
6925
6926 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6927     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6928     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6929     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6930
6931 SMB_IF_RTSIGNAL_BUG(
6932         [
6933             # Have RT_SIGNAL bug, need to check whether the problem will
6934             # affect anything we have configured.
6935
6936             rt_do_error=no
6937             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6938                 if test x"$rt_signal_lease_ok" = x"no" ; then
6939                     rt_do_error=yes
6940                 fi
6941             fi
6942
6943             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6944                 if test x"$rt_signal_notify_ok" = x"no" ; then
6945                     rt_do_error=yes
6946                 fi
6947             fi
6948
6949             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6950                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6951                 if test x"$rt_signal_aio_ok" = x"no" ; then
6952                     rt_do_error=yes
6953                 fi
6954             fi
6955
6956             if test x"$rt_do_error" = x"yes" ; then
6957                 SMB_IS_LIBPTHREAD_LINKED(
6958                     [
6959                         cat<<MSG
6960
6961 *** On this platforms, linking Samba against pthreads causes problems
6962 *** with the oplock and change notification mechanisms. You may be
6963 *** using pthreads as a side-effect of using the --with-aio-support
6964 *** or --with-profiling-data options. Please remove these and try again.
6965
6966 MSG
6967                     ],
6968                     [
6969                         cat<<MSG
6970
6971 *** On this platform, the oplock and change notification mechanisms do not
6972 *** appear to work. Please report this problem to samba-technical@samba.org
6973 *** and attach the config.log file from this directory.
6974
6975 MSG
6976                     ])
6977                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6978             fi
6979         ],
6980         [
6981             # no RT_SIGNAL bug, we are golden
6982             SMB_IS_LIBPTHREAD_LINKED(
6983                 [
6984                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6985                 ])
6986
6987         ],
6988         [
6989             # cross compiling, I hope you know what you are doing
6990             true
6991         ])
6992
6993 fi
6994
6995 m4_include(../lib/zlib/zlib.m4)
6996
6997 if test x$smbtorture4_possible = xyes; then
6998         saved_USESHARED="$USESHARED"
6999         USESHARED="false"
7000         smbtorture4_path="bin/smbtorture4"
7001         smbtorture4_option="-t bin/smbtorture4"
7002         AC_SUBST(smbtorture4_path)
7003         AC_SUBST(smbtorture4_option)
7004         USESHARED="$saved_USESHARED"
7005         SMBTORTURE4="bin/smbtorture4"
7006         AC_SUBST(SMBTORTURE4)
7007 fi
7008
7009 AC_SUBST(ZLIB_LIBS)
7010 AC_SUBST(ZLIB_OBJS)
7011 AC_ZLIB([ZLIB_OBJS=""], [
7012         ZLIB_LIBS=""
7013         for o in adler32.o compress.o crc32.o gzio.o uncompr.o \
7014                      deflate.o trees.o zutil.o inflate.o infback.o \
7015                          inftrees.o inffast.o
7016         do
7017                 ZLIB_OBJS="$ZLIB_OBJS ../lib/zlib/$o"
7018         done
7019         CFLAGS="-I../lib/zlib $CFLAGS"
7020 ])
7021
7022 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
7023
7024 if test "x$enable_dmalloc" = xyes
7025 then
7026         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
7027         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
7028                   [Define to check invariants around some common functions])
7029         LIBS="$LIBS -ldmalloc"
7030 fi
7031
7032 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
7033 LIB_REMOVE_USR_LIB(LDFLAGS)
7034 LIB_REMOVE_USR_LIB(LIBS)
7035
7036 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
7037 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
7038 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
7039
7040 #################################################
7041 # Display summary of libraries detected
7042
7043 AC_MSG_RESULT([Using libraries:])
7044 AC_MSG_RESULT([    LIBS = $LIBS])
7045 if test x"$with_ads_support" != x"no"; then
7046     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
7047 fi
7048 if test x"$with_ldap_support" != x"no"; then
7049     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
7050 fi
7051 if test x"$with_dnsupdate_support" != x"no"; then
7052     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
7053 fi
7054 if test x"$have_dnssd_support" != x"no"; then
7055     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
7056 fi
7057 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
7058
7059 #################################################
7060 # final configure stuff
7061
7062 AC_MSG_CHECKING([configure summary])
7063 AC_TRY_RUN([#include "${srcdir-.}/../tests/summary.c"],
7064            AC_MSG_RESULT(yes),
7065            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
7066            AC_MSG_WARN([cannot run when cross-compiling]))
7067
7068 dnl Merge in developer cflags from now on
7069 AC_SUBST(DEVELOPER_CFLAGS)
7070 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes" -o x"$picky_developer" = x"yes"; then
7071     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
7072 fi
7073
7074 # Stuff the smbd-only libraries at the end of the smbd link
7075 # path (if we have them).
7076 SMBD_LIBS="$samba_dmapi_libs"
7077 AC_SUBST(SMBD_LIBS)
7078
7079 CFLAGS="${CFLAGS} \$(FLAGS)"
7080 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
7081
7082 # If we had to expand the includes, make tsure the output file is moved back
7083 AC_OUTPUT_COMMANDS([
7084 if test -f Makefile-noincludes -a ! -f Makefile -a ! -h Makefile ; then
7085         ln -s Makefile-noincludes Makefile
7086 fi
7087 ])
7088
7089 AC_OUTPUT(Makefile
7090           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
7091           lib/netapi/examples/Makefile
7092           lib/netapi/tests/Makefile
7093           pkgconfig/smbclient.pc
7094           pkgconfig/wbclient.pc
7095           pkgconfig/netapi.pc
7096           pkgconfig/smbsharemodes.pc
7097           ../examples/libsmbclient/Makefile.internal
7098           )
7099
7100 #################################################
7101 # Print very concise instructions on building/use
7102 if test "x$enable_dmalloc" = xyes
7103 then
7104         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
7105         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
7106 fi