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