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