s3-param Remove special case for global_scope()
[ira/wip.git] / source3 / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.54 or above
4 AC_PREREQ(2.54)
5
6 AC_INIT([Samba],[3],[samba-technical@samba.org])
7
8 AC_CONFIG_SRCDIR([include/includes.h])
9 AC_CONFIG_HEADER(include/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         if test x"$USESHARED" == x"no" ; then
2154                 LINK_LIBTDB=STATIC
2155         fi
2156         LIBTDBVERSION=`grep ^VERSION ${tdbdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
2157         SMB_LIBRARY(tdb, 1, ${LIBTDBVERSION})
2158         LIBTDB_OBJ0=""
2159         LIBTDB_LIBS="$LIBTDB_LIBS $TDB_DEPS"
2160         for obj in ${TDB_OBJ}; do
2161                 LIBTDB_OBJ0="${LIBTDB_OBJ0} ${tdbdir}/${obj}"
2162         done
2163         AC_SUBST(LIBTDB_OBJ0)
2164         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
2165         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TDB_CFLAGS}"
2166
2167         TDBBACKUP="bin/tdbbackup\$(EXEEXT)"
2168         AC_SUBST(TDBBACKUP)
2169         TDBDUMP="bin/tdbdump\$(EXEEXT)"
2170         AC_SUBST(TDBDUMP)
2171         TDBRESTORE="bin/tdbrestore\$(EXEEXT)"
2172         AC_SUBST(TDBRESTORE)
2173         TDBTOOL="bin/tdbtool\$(EXEEXT)"
2174         AC_SUBST(TDBTOOL)
2175         TDBTORTURE="bin/tdbtorture\$(EXEEXT)"
2176         AC_SUBST(TDBTORTURE)
2177         ac_cv_have_tdb_err_nesting=yes
2178 else
2179         AC_TRY_COMPILE([#include <tdb.h>],
2180                        [enum TDB_ERROR err = TDB_ERR_NESTING],
2181                        ac_cv_have_tdb_err_nesting=yes,
2182                        ac_cv_have_tdb_err_nesting=no)
2183 fi
2184
2185 if test x"$ac_cv_have_tdb_err_nesting" = xyes; then
2186    AC_DEFINE(HAVE_TDB_ERR_NESTING, 1, [Whether we have TDB_ERR_NESTING])
2187 fi
2188
2189 SMB_LIBRARY(netapi, 0)
2190 SMB_LIBRARY(smbclient, 0)
2191 SMB_LIBRARY(smbsharemodes, 0)
2192 SMB_LIBRARY(addns, 0, [], no, [undefined API])
2193
2194
2195
2196 ################
2197
2198 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
2199 AC_TRY_RUN([#include <stdio.h>
2200 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
2201 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
2202 if test x"$samba_cv_have_longlong" = x"yes"; then
2203     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
2204     AC_CHECK_TYPE(intptr_t, unsigned long long)
2205 else
2206     AC_CHECK_TYPE(intptr_t, unsigned long)
2207 fi
2208
2209 #
2210 # Check if the compiler supports the LL prefix on long long integers.
2211 # AIX needs this.
2212
2213 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
2214     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
2215         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
2216 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
2217    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
2218 fi
2219
2220
2221 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
2222 AC_TRY_RUN([#include <time.h>
2223 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
2224 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
2225 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
2226     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
2227 fi
2228
2229 AC_CACHE_CHECK([for TIME_T_MAX],samba_cv_TIME_T_MAX,[
2230 AC_TRY_RUN([#include <time.h>
2231 main() {
2232         struct tm *tm;
2233         if (sizeof(time_t) == 8) {
2234                 time_t max_time = 0x7fffffffffffffffll;
2235                 tm = gmtime(&max_time);
2236                 /* This should fail with 32-bit tm_year. */
2237                 if (tm == NULL) {
2238                         /* Max time_t that works with 32-bit int tm_year in struct tm. */
2239                         max_time = 67768036191676799ll;
2240                         tm = gmtime(&max_time);
2241                         if (tm) {
2242                                 exit(0);
2243                         }
2244                 }
2245         }
2246         exit(1);
2247 }],
2248 samba_cv_TIME_T_MAX=yes,samba_cv_TIME_T_MAX=no,samba_cv_TIME_T_MAX=cross)])
2249 if test x"$samba_cv_TIME_T_MAX" = x"yes"; then
2250     AC_DEFINE(TIME_T_MAX,67768036191676799ll,[The maximum value of the 'time_t' type])
2251 fi
2252
2253
2254 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2255 AC_TRY_RUN([#include <stdio.h>
2256 #include <sys/stat.h>
2257 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
2258 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2259 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
2260     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
2261 fi
2262
2263 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
2264 AC_TRY_RUN([
2265 #if defined(HAVE_UNISTD_H)
2266 #include <unistd.h>
2267 #endif
2268 #include <stdio.h>
2269 #include <sys/stat.h>
2270 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2271 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
2272 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
2273     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
2274 fi
2275
2276 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2277 AC_TRY_RUN([
2278 #if defined(HAVE_UNISTD_H)
2279 #include <unistd.h>
2280 #endif
2281 #include <stdio.h>
2282 #include <sys/stat.h>
2283 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
2284 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2285 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2286     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2287 fi
2288
2289 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
2290 AC_TRY_RUN([
2291 #if defined(HAVE_UNISTD_H)
2292 #include <unistd.h>
2293 #endif
2294 #include <stdio.h>
2295 #include <sys/stat.h>
2296 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2297 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
2298 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
2299     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
2300 fi
2301
2302 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2303 AC_TRY_RUN([
2304 #if defined(HAVE_UNISTD_H)
2305 #include <unistd.h>
2306 #endif
2307 #include <stdio.h>
2308 #include <sys/stat.h>
2309 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2310 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2311 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2312     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2313 fi
2314
2315 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2316 AC_TRY_RUN([
2317 #if defined(HAVE_UNISTD_H)
2318 #include <unistd.h>
2319 #endif
2320 #include <stdio.h>
2321 #include <sys/stat.h>
2322 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2323 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2324 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2325     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2326 fi
2327
2328 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2329 AC_TRY_COMPILE([
2330 #if defined(HAVE_UNISTD_H)
2331 #include <unistd.h>
2332 #endif
2333 #include <sys/types.h>
2334 #include <dirent.h>],
2335 [DIR64 de;],
2336 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2337 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2338     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2339 fi
2340
2341 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2342 AC_TRY_COMPILE([
2343 #if defined(HAVE_UNISTD_H)
2344 #include <unistd.h>
2345 #endif
2346 #include <sys/types.h>
2347 #include <dirent.h>],
2348 [struct dirent64 de;],
2349 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2350 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2351     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2352 fi
2353
2354 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2355 AC_TRY_RUN([
2356 #if defined(HAVE_UNISTD_H)
2357 #include <unistd.h>
2358 #endif
2359 #include <sys/types.h>
2360 main() { dev_t dev; int i = major(dev); return 0; }],
2361 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2362 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2363     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2364 fi
2365
2366 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2367 AC_TRY_RUN([
2368 #if defined(HAVE_UNISTD_H)
2369 #include <unistd.h>
2370 #endif
2371 #include <sys/types.h>
2372 main() { dev_t dev; int i = minor(dev); return 0; }],
2373 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2374 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2375     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2376 fi
2377
2378 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2379 AC_TRY_RUN([
2380 #if defined(HAVE_UNISTD_H)
2381 #include <unistd.h>
2382 #endif
2383 #include <sys/types.h>
2384 main() { dev_t dev = makedev(1,2); return 0; }],
2385 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2386 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2387     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2388 fi
2389
2390 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2391 AC_TRY_RUN([#include <stdio.h>
2392 main() { char c; c=250; exit((c > 0)?0:1); }],
2393 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2394 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2395     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2396 fi
2397
2398 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2399 AC_TRY_COMPILE([#include <sys/types.h>
2400 #include <dirent.h>
2401 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2402 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2403 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2404     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2405 fi
2406
2407 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2408 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2409 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2410 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2411     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2412 fi
2413
2414 if test x"$libreplace_cv_HAVE_CLOCK_GETTIME_IN_LIBRT" = xyes ; then
2415         LIBS="$LIBS -lrt"
2416 fi
2417
2418 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2419 AC_TRY_RUN([#include <sys/types.h>
2420 #include <dirent.h>
2421 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2422 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2423 di->d_name[0] == 0) exit(0); exit(1);} ],
2424 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2425 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2426     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2427 fi
2428
2429 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2430 AC_TRY_COMPILE([#include <sys/types.h>
2431 #include <utime.h>],
2432 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2433 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2434 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2435     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2436 fi
2437
2438 ##############
2439 # Check utmp details, but only if our OS offers utmp.h
2440 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2441 dnl  utmp and utmpx come in many flavours
2442 dnl  We need to check for many of them
2443 dnl  But we don't need to do each and every one, because our code uses
2444 dnl  mostly just the utmp (not utmpx) fields.
2445
2446 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx getutxent)
2447
2448 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2449 AC_TRY_COMPILE([#include <sys/types.h>
2450 #include <utmp.h>],
2451 [struct utmp ut;  ut.ut_name[0] = 'a';],
2452 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2453 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2454     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2455 fi
2456
2457 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2458 AC_TRY_COMPILE([#include <sys/types.h>
2459 #include <utmp.h>],
2460 [struct utmp ut;  ut.ut_user[0] = 'a';],
2461 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2462 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2463     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2464 fi
2465
2466 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2467 AC_TRY_COMPILE([#include <sys/types.h>
2468 #include <utmp.h>],
2469 [struct utmp ut;  ut.ut_id[0] = 'a';],
2470 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2471 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2472     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2473 fi
2474
2475 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2476 AC_TRY_COMPILE([#include <sys/types.h>
2477 #include <utmp.h>],
2478 [struct utmp ut;  ut.ut_host[0] = 'a';],
2479 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2480 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2481     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2482 fi
2483
2484 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2485 AC_TRY_COMPILE([#include <sys/types.h>
2486 #include <utmp.h>],
2487 [struct utmp ut;  time_t t; ut.ut_time = t;],
2488 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2489 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2490     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2491 fi
2492
2493 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2494 AC_TRY_COMPILE([#include <sys/types.h>
2495 #include <utmp.h>],
2496 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2497 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2498 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2499     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2500 fi
2501
2502 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2503 AC_TRY_COMPILE([#include <sys/types.h>
2504 #include <utmp.h>],
2505 [struct utmp ut;  ut.ut_type = 0;],
2506 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2507 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2508     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2509 fi
2510
2511 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2512 AC_TRY_COMPILE([#include <sys/types.h>
2513 #include <utmp.h>],
2514 [struct utmp ut;  ut.ut_pid = 0;],
2515 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2516 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2517     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2518 fi
2519
2520 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2521 AC_TRY_COMPILE([#include <sys/types.h>
2522 #include <utmp.h>],
2523 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2524 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2525 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2526     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2527 fi
2528
2529 dnl Look for the IPv6 varient by preference. Many systems have both.
2530 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2531 AC_TRY_COMPILE([#include <sys/types.h>
2532 #include <utmp.h>],
2533 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2534 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2535 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2536     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2537 fi
2538
2539 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2540 AC_TRY_COMPILE([#include <sys/types.h>
2541 #include <utmp.h>],
2542 [struct utmp ut;  ut.ut_addr = 0;],
2543 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2544 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2545     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2546 fi
2547
2548 if test x$ac_cv_func_pututline = xyes ; then
2549   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2550   AC_TRY_COMPILE([#include <sys/types.h>
2551 #include <utmp.h>],
2552   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2553   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2554   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2555       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2556   fi
2557 fi
2558
2559 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2560 AC_TRY_COMPILE([#include <sys/types.h>
2561 #include <utmpx.h>],
2562 [struct utmpx ux;  ux.ut_syslen = 0;],
2563 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2564 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2565     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2566 fi
2567
2568 fi
2569 # end utmp details
2570
2571 AC_CACHE_CHECK([for linux fallocate],samba_cv_HAVE_LINUX_FALLOCATE,[
2572 AC_TRY_COMPILE([
2573 #if defined(HAVE_UNISTD_H)
2574 #include <unistd.h>
2575 #endif
2576 #include <sys/types.h>
2577 #define _GNU_SOURCE
2578 #include <fcntl.h>
2579 #if defined(HAVE_LINUX_FALLOC_H)
2580 #include <linux/falloc.h>
2581 #endif],
2582 [int ret = fallocate(0, FALLOC_FL_KEEP_SIZE, 0, 10);],
2583 samba_cv_HAVE_LINUX_FALLOCATE=yes,samba_cv_HAVE_LINUX_FALLOCATE=no)])
2584 if test x"$samba_cv_HAVE_LINUX_FALLOCATE" = x"yes" && test x"$ac_cv_func_fallocate" = x"yes"; then
2585     AC_DEFINE(HAVE_LINUX_FALLOCATE,1,[Whether the Linux 'fallocate' function is available])
2586 fi
2587
2588 AC_CACHE_CHECK([for linux fallocate64],samba_cv_HAVE_LINUX_FALLOCATE64,[
2589 AC_TRY_COMPILE([
2590 #if defined(HAVE_UNISTD_H)
2591 #include <unistd.h>
2592 #endif
2593 #include <sys/types.h>
2594 #define _GNU_SOURCE
2595 #include <fcntl.h>
2596 #if defined(HAVE_LINUX_FALLOC_H)
2597 #include <linux/falloc.h>
2598 #endif],
2599 [int ret = fallocate64(0, FALLOC_FL_KEEP_SIZE, 0, 10);],
2600 samba_cv_HAVE_LINUX_FALLOCATE64=yes,samba_cv_HAVE_LINUX_FALLOCATE64=no)])
2601 if test x"$samba_cv_HAVE_LINUX_FALLOCATE64" = x"yes" && test x"$ac_cv_func_fallocate64" = x"yes"; then
2602     AC_DEFINE(HAVE_LINUX_FALLOCATE64,1,[Whether the Linux 'fallocate64' function is available])
2603 fi
2604
2605 AC_CACHE_CHECK([for getcwd takes NULL],samba_cv_GETCWD_TAKES_NULL,[
2606 AC_TRY_RUN([
2607 #if defined(HAVE_UNISTD_H)
2608 #include <unistd.h>
2609 #endif
2610 main() { char *s = getcwd(NULL,0); if (s) exit(0); exit(1); }],
2611 samba_cv_GETCWD_TAKES_NULL=yes,samba_cv_GETCWD_TAKES_NULL=no,samba_cv_GETCWD_TAKES_NULL=cross)])
2612 if test x"$samba_cv_GETCWD_TAKES_NULL" = x"yes"; then
2613     AC_DEFINE(GETCWD_TAKES_NULL,1,[Whether the getcwd function takes NULL as an argument])
2614 fi
2615
2616 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2617 AC_ARG_WITH(libiconv,
2618 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2619 [
2620   if test "$withval" = "no" ; then
2621     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2622   else
2623      if test "$withval" != "yes" ; then
2624         ICONV_PATH_SPEC=yes
2625         ICONV_LOOK_DIRS="$withval"
2626      fi
2627   fi
2628 ])
2629
2630 for i in $ICONV_LOOK_DIRS ; do
2631
2632     save_LIBS="$LIBS"
2633     save_LDFLAGS="$LDFLAGS"
2634     save_CPPFLAGS="$CPPFLAGS"
2635
2636     iconv_current_LIBS=""
2637     iconv_current_LDFLAGS=""
2638     iconv_current_CPPFLAGS=""
2639
2640     ICONV_FOUND="no"
2641     unset libext
2642
2643     #  This is here to handle -withval stuff for --with-libiconv
2644     #  Perhaps we should always add a -L
2645     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2646
2647     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2648     # installation paths. This gets a little tricky since we might have iconv
2649     # in both libiconv and in libc. In this case the jm_ICONV test will always
2650     # succeed when the header is found. To counter this, make sure the
2651     # library directory is there and check the ABI directory first (which
2652     # should be harmless on other systems, but causes tons of linker warnings on
2653     # 64bit Ubuntu systems).
2654     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2655     # installed, I've decided to fix the linker warnings.
2656     # -- Kai
2657     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2658     for l in "lib" "lib32" "lib/hpux32"; do
2659         if test -d "$i/$l" ; then
2660                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2661                 LIBS=
2662                 export LDFLAGS LIBS CPPFLAGS
2663                 # Try to find iconv(3)
2664                 jm_ICONV($i/$l)
2665                 if test x"$ICONV_FOUND" = "xyes" ; then
2666                     libext="$l"
2667                     break
2668                 fi
2669         fi
2670     done
2671
2672     if test x"$ICONV_FOUND" = "xyes" ; then
2673         iconv_current_LDFLAGS="-L$i/$libext"
2674         iconv_current_CPPFLAGS="-I$i/include"
2675
2676         if test x"$jm_cv_lib_iconv" != x; then
2677             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2678         else
2679             # We found iconv in libc.
2680             iconv_current_LIBS=""
2681         fi
2682
2683     fi
2684
2685     if test x"$ICONV_FOUND" = "xyes" ; then
2686
2687         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2688         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2689         LIBS="$save_LIBS $iconv_current_LIBS"
2690         export LDFLAGS LIBS CPPFLAGS
2691
2692         default_dos_charset=no
2693         default_display_charset=no
2694         default_unix_charset=no
2695
2696         # check for default dos charset name
2697         for j in CP850 IBM850 ; do
2698             rjs_CHARSET($j)
2699             default_dos_charset="$ICONV_CHARSET"
2700             if test x"$default_dos_charset" = x"$j"; then
2701                 break
2702             fi
2703         done
2704
2705         # check for default display charset name
2706         for j in ASCII 646 ; do
2707             rjs_CHARSET($j)
2708             default_display_charset="$ICONV_CHARSET"
2709             if test x"$default_display_charset" = x"$j"; then
2710                 break
2711             fi
2712         done
2713
2714         # check for default unix charset name
2715         for j in UTF-8 UTF8 ; do
2716             rjs_CHARSET($j)
2717             default_unix_charset="$ICONV_CHARSET"
2718             if test x"$default_unix_charset" = x"$j"; then
2719                 break
2720             fi
2721         done
2722
2723         if test "$default_dos_charset" != "no" -a \
2724                 "$default_dos_charset" != "cross" -a \
2725                 "$default_display_charset" != "no" -a \
2726                 "$default_display_charset" != "cross" -a \
2727                 "$default_unix_charset" != "no" -a \
2728                 "$default_unix_charset" != "cross"
2729         then
2730                 samba_cv_HAVE_NATIVE_ICONV=yes
2731         else
2732             if test "$default_dos_charset" = "cross" -o \
2733                      "$default_display_charset" = "cross" -o \
2734                      "$default_unix_charset" = "cross"
2735             then
2736                     samba_cv_HAVE_NATIVE_ICONV=cross
2737             else
2738                     samba_cv_HAVE_NATIVE_ICONV=no
2739             fi
2740         fi
2741
2742         # At this point, we have a libiconv candidate. We know that
2743         # we have the right headers and libraries, but we don't know
2744         # whether it does the conversions we want. We can't test this
2745         # because we are cross-compiling. This is not necessarily a big
2746         # deal, since we can't guarantee that the results we get now will
2747         # match the results we get at runtime anyway.
2748         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2749             default_dos_charset="CP850"
2750             default_display_charset="ASCII"
2751             default_unix_charset="UTF-8"
2752             samba_cv_HAVE_NATIVE_ICONV=yes
2753             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2754             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2755         fi
2756
2757         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2758
2759             CPPFLAGS=$save_CPPFLAGS
2760             LDFLAGS=$save_LDFLAGS
2761             LIBS=$save_LIBS
2762
2763             if test x"$iconv_current_LIBS" != x; then
2764                 LIBS="$LIBS $iconv_current_LIBS"
2765             fi
2766
2767             # Add the flags we need to CPPFLAGS and LDFLAGS
2768             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2769             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2770
2771             # Turn the #defines into string literals
2772             default_dos_charset="\"$default_dos_charset\""
2773             default_display_charset="\"$default_display_charset\""
2774             default_unix_charset="\"$default_unix_charset\""
2775
2776             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2777             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2778             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2779             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2780
2781            break
2782         fi
2783
2784     # We didn't find a working iconv, so keep going
2785     fi
2786
2787     #  We only need to clean these up here for the next pass through the loop
2788     CPPFLAGS=$save_CPPFLAGS
2789     LDFLAGS=$save_LDFLAGS
2790     LIBS=$save_LIBS
2791     export LDFLAGS LIBS CPPFLAGS
2792 done
2793 unset libext
2794
2795
2796 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2797     AC_MSG_WARN([Sufficient support for iconv function was not found.
2798     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2799    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2800    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2801    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2802 fi
2803
2804
2805 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2806 AC_TRY_RUN([
2807 #include <sys/types.h>
2808 #include <fcntl.h>
2809 #ifndef F_GETLEASE
2810 #define F_GETLEASE      1025
2811 #endif
2812 main() {
2813        int fd = open("/dev/null", O_RDONLY);
2814        return fcntl(fd, F_GETLEASE, 0) == -1;
2815 }
2816 ],
2817 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2818 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2819     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2820 fi
2821
2822 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2823 AC_TRY_RUN([
2824 #include <sys/types.h>
2825 #include <fcntl.h>
2826 #include <signal.h>
2827 #ifndef F_NOTIFY
2828 #define F_NOTIFY 1026
2829 #endif
2830 main() {
2831         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2832 }
2833 ],
2834 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2835 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2836     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2837 fi
2838
2839 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2840 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h sys/inotify.h)
2841 AC_CHECK_FUNCS(inotify_init)
2842 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2843 ],
2844 samba_cv_HAVE_INOTIFY=yes,
2845 samba_cv_HAVE_INOTIFY=no,
2846 samba_cv_HAVE_INOTIFY=cross)
2847
2848 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2849     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2850 fi
2851
2852 #################################################
2853 # Check if FAM notifications are available. For FAM info, see
2854 #       http://oss.sgi.com/projects/fam/
2855 #       http://savannah.nongnu.org/projects/fam/
2856 AC_ARG_ENABLE(fam,
2857 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2858
2859 if test x$enable_fam != xno; then
2860     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2861     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2862         # On IRIX, libfam requires libC, but other FAM implementations
2863         # might not need it.
2864         AC_CHECK_LIB(fam, FAMOpen2,
2865             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam";
2866             AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2867             [samba_cv_HAVE_LIBFAM=no])
2868
2869         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2870             samba_fam_xtra=-lC
2871             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2872                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC";
2873                 AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2874                 [samba_cv_HAVE_LIBFAM=no])
2875             unset samba_fam_xtra
2876         fi
2877     fi
2878     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2879         default_shared_modules="$default_shared_modules vfs_notify_fam"
2880         AC_TRY_COMPILE([#include <fam.h>],
2881                     [enum FAMCodes code = FAMChanged;],
2882                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2883                         [Whether fam.h contains a typedef for enum FAMCodes]),
2884                     [])
2885     fi
2886
2887     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2888         AC_CHECK_LIB(fam, FAMNoExists,
2889             [AC_DEFINE(HAVE_FAMNOEXISTS, 1, Define to 1 if there is support for FAMNoExists)])
2890     fi
2891
2892     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2893         AC_MSG_ERROR(FAM support requested but FAM library not available )
2894     fi
2895 fi
2896
2897 AC_SUBST(SMB_FAM_LIBS)
2898
2899 #################################################
2900 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2901
2902
2903 with_dmapi_support=auto
2904 AC_MSG_CHECKING(whether to use DMAPI support)
2905 AC_ARG_WITH(dmapi,
2906 [AS_HELP_STRING([--with-dmapi], [Include DMAPI/XDSM support (default=auto)])],
2907 [ case "$withval" in
2908   yes|no)
2909     with_dmapi_support=$withval
2910     ;;
2911   esac ]
2912 )
2913 AC_MSG_RESULT([$with_dmapi_support])
2914
2915 if test x"$with_dmapi_support" != xno ; then
2916         SMB_CHECK_DMAPI([], [
2917                 AC_MSG_NOTICE(DMAPI support not present)
2918                 if test x"$with_dmapi_support" = xyes ; then
2919                         AC_MSG_ERROR(no DMAPI support found but requested!)
2920                 fi
2921                 ]
2922         )
2923 fi
2924
2925 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2926 # Theoretically it should work with AIX JFS2 too but this needs testing
2927 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2928     default_shared_modules="$default_shared_modules vfs_tsmsm"
2929 fi
2930
2931 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2932 AC_TRY_RUN([
2933 #include <sys/types.h>
2934 #include <fcntl.h>
2935 #include <signal.h>
2936 #include <sys/file.h>
2937 #ifndef LOCK_MAND
2938 #define LOCK_MAND       32
2939 #define LOCK_READ       64
2940 #endif
2941 main() {
2942         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2943 }
2944 ],
2945 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2946 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2947     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2948 fi
2949
2950
2951 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2952 AC_TRY_COMPILE([#include <sys/types.h>
2953 #include <fcntl.h>],
2954 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2955 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2956 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2957     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2958 fi
2959
2960 #################################################
2961 # Check for POSIX capability support
2962
2963 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2964     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2965     [], [])
2966
2967 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2968
2969     ac_save_LIBS=$LIBS
2970     AC_LIBTESTFUNC(cap, cap_get_proc)
2971
2972     AC_CACHE_CHECK([for POSIX capabilities],
2973             samba_cv_HAVE_POSIX_CAPABILITIES,
2974             [
2975                 AC_TRY_RUN([
2976 #include <sys/types.h>
2977 #include <sys/capability.h>
2978 main() {
2979  cap_t cap;
2980  cap_value_t vals[1];
2981  if (!(cap = cap_get_proc()))
2982    exit(1);
2983  vals[0] = CAP_CHOWN;
2984  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2985  cap_set_proc(cap);
2986  exit(0);
2987 }],
2988                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2989                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2990                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2991             ])
2992
2993 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2994     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2995             [Whether POSIX capabilities are available])
2996 else
2997     LIBS=$ac_save_LIBS
2998 fi
2999
3000 fi
3001
3002 #
3003 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
3004 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
3005 #
3006
3007 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
3008 AC_TRY_COMPILE([#include <sys/types.h>
3009 #if defined(HAVE_RPC_RPC_H)
3010 #include <rpc/rpc.h>
3011 #endif],
3012 [int16 testvar;],
3013 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
3014 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
3015     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
3016 fi
3017
3018 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
3019 AC_TRY_COMPILE([#include <sys/types.h>
3020 #if defined(HAVE_RPC_RPC_H)
3021 #include <rpc/rpc.h>
3022 #endif],
3023 [uint16 testvar;],
3024 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
3025 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
3026     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
3027 fi
3028
3029 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
3030 AC_TRY_COMPILE([#include <sys/types.h>
3031 #if defined(HAVE_RPC_RPC_H)
3032 #include <rpc/rpc.h>
3033 #endif],
3034 [int32 testvar;],
3035 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
3036 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
3037     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
3038 fi
3039
3040 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
3041 AC_TRY_COMPILE([#include <sys/types.h>
3042 #if defined(HAVE_RPC_RPC_H)
3043 #include <rpc/rpc.h>
3044 #endif],
3045 [uint32 testvar;],
3046 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
3047 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
3048     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
3049 fi
3050
3051 dnl
3052 dnl Some systems (SCO) have a problem including
3053 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
3054 dnl as a #define in <prot.h> and as part of an enum
3055 dnl in <rpc/rpc.h>.
3056 dnl
3057
3058 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
3059 AC_TRY_COMPILE([#include <sys/types.h>
3060 #ifdef HAVE_SYS_SECURITY_H
3061 #include <sys/security.h>
3062 #include <prot.h>
3063 #endif  /* HAVE_SYS_SECURITY_H */
3064 #if defined(HAVE_RPC_RPC_H)
3065 #include <rpc/rpc.h>
3066 #endif],
3067 [int testvar;],
3068 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
3069 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
3070     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
3071 fi
3072
3073 AC_MSG_CHECKING([for test routines])
3074 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
3075            AC_MSG_RESULT(yes),
3076            AC_MSG_ERROR([cant find test code. Aborting config]),
3077            AC_MSG_WARN([cannot run when cross-compiling]))
3078
3079 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
3080 AC_TRY_RUN([#include "${srcdir-.}/../tests/ftruncate.c"],
3081            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
3082 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
3083     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
3084 fi
3085
3086 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
3087 AC_TRY_RUN([#include "${srcdir-.}/../tests/getgroups.c"],
3088            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
3089 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
3090     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
3091 fi
3092
3093 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
3094 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
3095 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
3096 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
3097 AC_CHECK_FUNCS(getpagesize)
3098
3099 ################################################
3100 # look for a method of setting the effective uid
3101 seteuid=no;
3102
3103 if test $seteuid = no; then
3104 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
3105 AC_TRY_RUN([
3106 #define AUTOCONF_TEST 1
3107 #define USE_SETREUID 1
3108 #include "confdefs.h"
3109 #include "${srcdir-.}/lib/util_sec.c"],
3110            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
3111 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
3112     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
3113 fi
3114 fi
3115
3116 # we check for setresuid second as it conflicts with AIO on Linux. 
3117 # see http://samba.org/~tridge/junkcode/aio_uid.c
3118 if test $seteuid = no; then
3119 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
3120 AC_TRY_RUN([
3121 #define AUTOCONF_TEST 1
3122 #define USE_SETRESUID 1
3123 #include "confdefs.h"
3124 #include "${srcdir-.}/lib/util_sec.c"],
3125            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
3126 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
3127     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
3128 fi
3129 fi
3130
3131 if test $seteuid = no; then
3132 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
3133 AC_TRY_RUN([
3134 #define AUTOCONF_TEST 1
3135 #define USE_SETEUID 1
3136 #include "confdefs.h"
3137 #include "${srcdir-.}/lib/util_sec.c"],
3138            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
3139 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
3140     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
3141 fi
3142 fi
3143
3144 if test $seteuid = no; then
3145 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
3146 AC_TRY_RUN([
3147 #define AUTOCONF_TEST 1
3148 #define USE_SETUIDX 1
3149 #include "confdefs.h"
3150 #include "${srcdir-.}/lib/util_sec.c"],
3151            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
3152 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
3153     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
3154 fi
3155 fi
3156
3157 AC_CACHE_CHECK([for the Darwin initgroups system call],
3158         samba_cv_DARWIN_INITGROUPS,
3159         AC_TRY_LINK([
3160 #include <sys/syscall.h>
3161 #include <unistd.h>
3162         ],
3163         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
3164         samba_cv_DARWIN_INITGROUPS=yes,
3165         samba_cv_DARWIN_INITGROUPS=no)
3166 )
3167
3168 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
3169     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
3170         [Whether to use the Darwin-specific initgroups system call])
3171 fi
3172
3173 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
3174 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock.c"],
3175            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
3176 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
3177     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
3178 fi
3179
3180 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
3181 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock64.c"],
3182            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
3183 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
3184     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
3185
3186 else
3187
3188 dnl
3189 dnl Don't check for 64 bit fcntl locking if we know that the
3190 dnl glibc2.1 broken check has succeeded.
3191 dnl
3192
3193   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
3194   AC_TRY_RUN([
3195 #if defined(HAVE_UNISTD_H)
3196 #include <unistd.h>
3197 #endif
3198 #include <stdio.h>
3199 #include <stdlib.h>
3200
3201 #ifdef HAVE_FCNTL_H
3202 #include <fcntl.h>
3203 #endif
3204
3205 #ifdef HAVE_SYS_FCNTL_H
3206 #include <sys/fcntl.h>
3207 #endif
3208 main() { struct flock64 fl64;
3209 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
3210 exit(0);
3211 #else
3212 exit(1);
3213 #endif
3214 }],
3215        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
3216
3217   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
3218       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
3219   fi
3220 fi
3221
3222 # glibc up to 2.3.6 had dangerously broken posix_fallocate(). DON'T USE IT.
3223 AC_CACHE_CHECK([for broken posix_fallocate],samba_cv_HAVE_BROKEN_POSIX_FALLOCATE,[
3224 AC_TRY_COMPILE([
3225   #define _XOPEN_SOURCE 600
3226   #include <stdlib.h>
3227   #if defined(__GLIBC__) && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4))
3228     probably broken posix_fallocate
3229   #endif
3230 ], [
3231 ], 
3232 samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=no,samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=yes)])
3233 if test x"$samba_cv_HAVE_BROKEN_POSIX_FALLOCATE" = xyes; then
3234         AC_DEFINE(HAVE_BROKEN_POSIX_FALLOCATE,, Whether we have a broken posix_fallocate)
3235 fi
3236
3237
3238 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
3239 AC_TRY_COMPILE([#include <sys/types.h>
3240 #include <sys/stat.h>
3241 #include <unistd.h>],
3242 [struct stat st;  st.st_blocks = 0;],
3243 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
3244 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
3245     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
3246 fi
3247
3248 AC_CHECK_TYPES([blksize_t, blkcnt_t], [], [], [[#include <sys/stat.h>]])
3249
3250 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
3251 AC_TRY_COMPILE([#include <sys/types.h>
3252 #include <sys/stat.h>
3253 #include <unistd.h>],
3254 [struct stat st;  st.st_blksize = 0;],
3255 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
3256 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
3257     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
3258 fi
3259
3260 AC_CACHE_CHECK([for st_flags in struct stat],
3261         samba_cv_HAVE_STAT_ST_FLAGS,
3262         [
3263             AC_TRY_COMPILE([#include <sys/types.h>
3264 #include <sys/stat.h>
3265 #include <unistd.h>],
3266             [struct stat st;  st.st_flags = 0;],
3267             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3268             samba_cv_HAVE_STAT_ST_FLAGS=no,
3269             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3270         ])
3271
3272 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3273     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3274                 [Whether the stat struct has a st_flags member])
3275 fi
3276
3277 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3278 AC_TRY_COMPILE([
3279 #include <sys/types.h>
3280 #include <sys/acl.h>
3281 #if defined(HAVE_RPCSVC_NIS_H)
3282 #include <rpcsvc/nis.h>
3283 #endif],
3284 [int i;],
3285 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3286 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3287         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3288 fi
3289
3290 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3291 AC_TRY_RUN([
3292 #include <stdio.h>
3293 #include <limits.h>
3294 #include <signal.h>
3295
3296 void exit_on_core(int ignored) {
3297         exit(1);
3298 }
3299
3300 main() {
3301         char *newpath;
3302         signal(SIGSEGV, exit_on_core);
3303         newpath = realpath("/tmp", NULL);
3304         exit((newpath != NULL) ? 0 : 1);
3305 }
3306 ],
3307 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3308 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3309     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3310 fi
3311
3312 #################################################
3313 # check for AFS clear-text auth support
3314 samba_cv_WITH_AFS=no
3315 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3316 AC_ARG_WITH(afs,
3317 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
3318 [ case "$withval" in
3319   yes|auto)
3320     AC_MSG_RESULT($withval)
3321     samba_cv_WITH_AFS=$withval
3322     ;;
3323   *)
3324     AC_MSG_RESULT(no)
3325     ;;
3326   esac ],
3327   AC_MSG_RESULT(no)
3328 )
3329
3330 ####################################################
3331 # check for Linux-specific AFS fake-kaserver support
3332 samba_cv_WITH_FAKE_KASERVER=no
3333 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3334 AC_ARG_WITH(fake-kaserver,
3335 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
3336 [ case "$withval" in
3337   yes|auto)
3338     AC_MSG_RESULT($withval)
3339     samba_cv_WITH_FAKE_KASERVER=$withval
3340     ;;
3341   *)
3342     AC_MSG_RESULT(no)
3343     ;;
3344   esac ],
3345   AC_MSG_RESULT(no)
3346 )
3347
3348 #################################################
3349 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3350 if test x"$samba_cv_WITH_AFS" != x"no" ||
3351    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3352
3353     # see if this box has the OpenSSL DES libraries
3354     AC_CHECK_LIB( crypto, DES_pcbc_encrypt, LIBS="$LIBS -lcrypto" , [AC_ERROR(OpenSSL library: libcrypto ot found!)] )
3355
3356     # see if this box has the afs-headers in /usr/include/afs
3357     AC_MSG_CHECKING(for /usr/include/afs)
3358     if test -d /usr/include/afs; then
3359           AC_MSG_RESULT(yes)
3360     else
3361       AC_MSG_RESULT(no)
3362     fi
3363
3364     # check for afs.h
3365     have_afs_headers=no
3366     AC_CHECK_HEADERS(afs.h afs/afs.h)
3367     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3368         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3369            test x"$samba_cv_WITH_AFS" = x"auto"; then
3370                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3371         else
3372                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3373         fi
3374     else
3375         have_afs_headers=yes
3376     fi
3377 fi
3378
3379 FAKE_KASERVER_OBJ=""
3380 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3381     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3382     FAKE_KASERVER_OBJ="utils/net_afs.o"
3383 fi
3384 AC_SUBST(FAKE_KASERVER_OBJ)
3385
3386 #################################################
3387 # check whether to compile AFS/NT ACL mapping module
3388 samba_cv_WITH_VFS_AFSACL=no
3389 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3390 AC_ARG_WITH(vfs-afsacl,
3391 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
3392 [ case "$withval" in
3393   yes|auto)
3394     AC_MSG_RESULT($withval)
3395     samba_cv_WITH_VFS_AFSACL=yes
3396     ;;
3397   *)
3398     AC_MSG_RESULT(no)
3399     ;;
3400   esac ],
3401   AC_MSG_RESULT(no)
3402 )
3403
3404 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3405    default_shared_modules="$default_shared_modules vfs_afsacl"
3406 fi
3407         
3408 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3409     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3410 fi
3411
3412 #################################################
3413 # check for the DFS clear-text auth system
3414 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3415 AC_ARG_WITH(dfs,
3416 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3417 [ case "$withval" in
3418   yes)
3419     AC_MSG_RESULT(yes)
3420     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3421     ;;
3422   *)
3423     AC_MSG_RESULT(no)
3424     ;;
3425   esac ],
3426   AC_MSG_RESULT(no)
3427 )
3428
3429 ########################################################
3430 # Compile with LDAP support?
3431
3432 with_ldap_support=auto
3433 AC_MSG_CHECKING([for LDAP support])
3434
3435 AC_ARG_WITH(ldap,
3436 [AS_HELP_STRING([--with-ldap], [LDAP support (default=auto)])],
3437 [ case "$withval" in
3438     yes|no)
3439         with_ldap_support=$withval
3440         ;;
3441   esac ])
3442
3443 AC_MSG_RESULT($with_ldap_support)
3444
3445 SMBLDAP=""
3446 AC_SUBST(SMBLDAP)
3447 SMBLDAPUTIL=""
3448 AC_SUBST(SMBLDAPUTIL)
3449
3450 if test x"$with_ldap_support" != x"no"; then
3451
3452   ##################################################################
3453   # first test for ldap.h and lber.h
3454   # (ldap.h is required for this test)
3455   AC_CHECK_HEADERS(ldap.h lber.h)
3456
3457   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3458         if test x"$with_ldap_support" = x"yes"; then
3459          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3460         else
3461          AC_MSG_WARN(ldap.h is needed for LDAP support)
3462         fi
3463         
3464         with_ldap_support=no
3465   fi
3466
3467   ##################################################################
3468   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3469   # unsigned int in include/includes.h
3470   case $host_os in
3471         *hpux*)
3472          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3473          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3474         with_ldap_support=yes
3475         ;;
3476         *)
3477         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3478         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3479                 if test x"$with_ldap_support" = x"yes"; then
3480                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3481                 else
3482                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3483                 fi
3484                 with_ldap_support=no
3485         fi
3486         ;;
3487   esac
3488 fi
3489
3490 if test x"$with_ldap_support" != x"no"; then
3491   ac_save_LIBS=$LIBS
3492
3493   ##################################################################
3494   # we might need the lber lib on some systems. To avoid link errors
3495   # this test must be before the libldap test
3496   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3497
3498   ########################################################
3499   # If ber_sockbuf_add_io() is available we can add
3500   # SASL wrapping hooks
3501   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3502
3503   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3504                  AC_TRY_COMPILE([#include <ldap.h>],
3505                                 [int val = LDAP_OPT_SOCKBUF;],
3506                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3507                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3508
3509   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3510           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3511         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3512   fi
3513
3514   #######################################################
3515   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3516   # ldap logging and print it out in the samba logs
3517   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3518                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3519                  [AC_TRY_COMPILE([#include <lber.h>],
3520                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3521                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3522                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3523
3524   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3525         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3526                   [Support for LDAP/LBER logging interception])
3527   fi
3528
3529   ########################################################
3530   # now see if we can find the ldap libs in standard paths
3531   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3532
3533   ########################################################
3534   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3535   # Check found in pam_ldap 145.
3536   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3537
3538   LIBS="$LIBS $LDAP_LIBS"
3539   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3540     AC_TRY_COMPILE([
3541         #include <lber.h>
3542         #include <ldap.h>],
3543         [ldap_set_rebind_proc(0, 0, 0);],
3544         [smb_ldap_cv_ldap_set_rebind_proc=3],
3545         [smb_ldap_cv_ldap_set_rebind_proc=2]
3546     )
3547   ])
3548
3549   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3550
3551   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3552
3553   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3554     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3555     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3556     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3557     default_shared_modules="$default_shared_modules";
3558     SMBLDAP="lib/smbldap.o"
3559     SMBLDAPUTIL="lib/smbldap_util.o"
3560     with_ldap_support=yes
3561     AC_MSG_CHECKING(whether LDAP support is used)
3562     AC_MSG_RESULT(yes)
3563   else
3564     if test x"$with_ldap_support" = x"yes"; then
3565         AC_MSG_ERROR(libldap is needed for LDAP support)
3566     else
3567         AC_MSG_WARN(libldap is needed for LDAP support)
3568     fi
3569
3570     LDAP_LIBS=""
3571     with_ldap_support=no
3572   fi
3573   LIBS=$ac_save_LIBS
3574 fi
3575
3576
3577 #################################################
3578 # active directory support
3579
3580 with_ads_support=auto
3581 AC_MSG_CHECKING([for Active Directory and krb5 support])
3582
3583 AC_ARG_WITH(ads,
3584 [AS_HELP_STRING([--with-ads], [Active Directory support (default=auto)])],
3585 [ case "$withval" in
3586     yes|no)
3587         with_ads_support="$withval"
3588         ;;
3589   esac ])
3590
3591 AC_MSG_RESULT($with_ads_support)
3592
3593 FOUND_KRB5=no
3594 KRB5_LIBS=""
3595
3596 if test x"$with_ldap_support" != x"yes"; then
3597
3598     if test x"$with_ads_support" = x"yes"; then
3599         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3600     elif test x"$with_ads_support" = x"auto"; then
3601         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3602         with_ads_support=no
3603     fi
3604
3605 else
3606
3607     # Check to see whether there is enough LDAP functionality to be able
3608     # to build AD support.
3609
3610 # HPUX and Solaris only has ldap_init; ok, we take care of this in smbldap.c
3611 case "$host_os" in
3612         *hpux* | *solaris*)
3613     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3614
3615     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3616         if test x"$with_ads_support" = x"yes"; then
3617             AC_MSG_ERROR(Active Directory support on HPUX or Solaris requires ldap_init)
3618         elif test x"$with_ads_support" = x"auto"; then
3619             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX or Solaris))
3620             with_ads_support=no
3621         fi
3622     fi
3623     ;;
3624         *)
3625     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3626
3627     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3628         if test x"$with_ads_support" = x"yes"; then
3629             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3630         elif test x"$with_ads_support" = x"auto"; then
3631             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3632             with_ads_support=no
3633         fi
3634     fi
3635     ;;
3636 esac
3637
3638
3639     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3640
3641     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3642         if test x"$with_ads_support" = x"yes"; then
3643             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3644         elif test x"$with_ads_support" = x"auto"; then
3645             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3646             with_ads_support=no
3647         fi
3648     fi
3649
3650 fi
3651
3652 if test x"$with_ads_support" != x"no"; then
3653
3654   # Do no harm to the values of CFLAGS and LIBS while testing for
3655   # Kerberos support.
3656
3657   if test x$FOUND_KRB5 = x"no"; then
3658     #################################################
3659     # check for location of Kerberos 5 install
3660     AC_MSG_CHECKING(for kerberos 5 install path)
3661     AC_ARG_WITH(krb5,
3662     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3663     [ case "$withval" in
3664       no)
3665         AC_MSG_RESULT(no krb5-path given)
3666         ;;
3667       yes)
3668         AC_MSG_RESULT(/usr)
3669         ;;
3670       *)
3671         AC_MSG_RESULT($withval)
3672         KRB5_CFLAGS="-I$withval/include"
3673         KRB5_CPPFLAGS="-I$withval/include"
3674         KRB5_LDFLAGS="-L$withval/lib"
3675         FOUND_KRB5=yes
3676         if test -x "$withval/bin/krb5-config"; then
3677                 KRB5CONFIG=$withval/bin/krb5-config
3678         fi
3679         ;;
3680       esac ],
3681       AC_MSG_RESULT(no krb5-path given)
3682     )
3683   fi
3684
3685   #################################################
3686   # check for krb5-config from recent MIT and Heimdal kerberos 5
3687   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3688   AC_MSG_CHECKING(for working krb5-config)
3689   if test -x "$KRB5CONFIG" && $KRB5CONFIG --libs gssapi > /dev/null ; then
3690     ac_save_CFLAGS=$CFLAGS
3691     CFLAGS="";export CFLAGS
3692     ac_save_LDFLAGS=$LDFLAGS
3693     LDFLAGS="";export LDFLAGS
3694     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3695     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3696     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3697     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3698     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3699     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3700     FOUND_KRB5=yes
3701     AC_MSG_RESULT(yes)
3702   else
3703     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3704   fi
3705
3706   if test x$FOUND_KRB5 = x"no"; then
3707     #################################################
3708     # see if this box has the SuSE location for the heimdal krb implementation
3709     AC_MSG_CHECKING(for /usr/include/heimdal)
3710     if test -d /usr/include/heimdal; then
3711       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3712           KRB5_CFLAGS="-I/usr/include/heimdal"
3713           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3714           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3715           FOUND_KRB5=yes
3716           AC_MSG_RESULT(yes)
3717       else
3718           KRB5_CFLAGS="-I/usr/include/heimdal"
3719           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3720           FOUND_KRB5=yes
3721           AC_MSG_RESULT(yes)
3722       fi
3723     else
3724       AC_MSG_RESULT(no)
3725     fi
3726   fi
3727
3728   if test x$FOUND_KRB5 = x"no"; then
3729     #################################################
3730     # see if this box has the RedHat location for kerberos
3731     AC_MSG_CHECKING(for /usr/kerberos)
3732     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3733       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3734       KRB5_CFLAGS="-I/usr/kerberos/include"
3735       KRB5_CPPFLAGS="-I/usr/kerberos/include"
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 the OpenBSD location for heimdal krb5
3746     AC_MSG_CHECKING(for /usr/include/kerberosV)
3747     if test -d /usr/include/kerberosV; then
3748       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3749       KRB5_LIBS="-lcrypto"
3750       FOUND_KRB5=yes
3751       AC_MSG_RESULT(yes)
3752     else
3753       AC_MSG_RESULT(no)
3754     fi
3755   fi
3756
3757   if test x$FOUND_KRB5 = x"no"; then
3758     #################################################
3759     # see if this box has Solaris MIT kerberos implementation
3760     AC_MSG_CHECKING(for Solaris MIT kerberos)
3761     if test -x "$KRB5CONFIG" && $KRB5CONFIG --version | grep -s Solaris | grep -s MIT > /dev/null ; then
3762        FOUND_KRB5=yes
3763        KRB5_LIBS="-lgss -lkrb5"
3764        KRB5_CFLAGS="`$KRB5CONFIG --cflags`"
3765        KRB5_CPPFLAGS="`$KRB5CONFIG --cflags`"
3766        AC_MSG_RESULT(yes)
3767     else
3768       AC_MSG_RESULT(no)
3769     fi
3770   fi
3771
3772   ac_save_CFLAGS=$CFLAGS
3773   ac_save_CPPFLAGS=$CPPFLAGS
3774   ac_save_LDFLAGS=$LDFLAGS
3775
3776   # remove needless evil rpath stuff as early as possible:
3777   LIB_REMOVE_USR_LIB(KRB5_LIBS)
3778   LIB_REMOVE_USR_LIB(KRB5_LDFLAGS)
3779   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3780   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3781   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3782
3783   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3784
3785   # now check for krb5.h. Some systems have the libraries without the headers!
3786   # note that this check is done here to allow for different kerberos
3787   # include paths
3788   AC_CHECK_HEADERS(krb5.h)
3789
3790   if test x"$ac_cv_header_krb5_h" = x"no"; then
3791
3792     # Give a warning if AD support was not explicitly requested,
3793     # i.e with_ads_support = auto, otherwise die with an error.
3794
3795     if test x"$with_ads_support" = x"yes"; then
3796       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3797     else
3798       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3799     fi
3800
3801     # Turn off AD support and restore CFLAGS and LIBS variables
3802
3803     with_ads_support="no"
3804
3805     CFLAGS=$ac_save_CFLAGS
3806     CPPFLAGS=$ac_save_CPPFLAGS
3807     LDFLAGS=$ac_save_LDFLAGS
3808   fi
3809
3810   # check for new heimdal KRB5_DEPRECATED handling
3811
3812   AC_CACHE_CHECK([for KRB5_DEPRECATED define taking an identifier],
3813                 samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER,[
3814     AC_TRY_COMPILE(
3815       [#define KRB5_DEPRECATED 1
3816       #include <krb5.h>],
3817       [],
3818       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=yes,
3819       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=no)])
3820
3821   if test x"$samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER" = x"yes"; then
3822     AC_DEFINE(HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER, 1,
3823                [Whether to use deprecated krb5 interfaces])
3824   fi
3825 fi
3826
3827 # Now we have determined whether we really want ADS support
3828 use_ads=no
3829 if test x"$with_ads_support" != x"no"; then
3830   use_ads=yes
3831   have_gssapi=no
3832   ac_save_LIBS=$LIBS
3833
3834   # now check for gssapi headers.  This is also done here to allow for
3835   # different kerberos include paths
3836   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h gssapi/gssapi_ext.h gssapi/gssapi_krb5.h com_err.h)
3837
3838   ##################################################################
3839   # we might need the k5crypto and com_err libraries on some systems
3840   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3841   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3842
3843   # Heimdal checks.
3844   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3845   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3846   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3847
3848   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3849   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3850
3851   ########################################################
3852   # now see if we can find the krb5 libs in standard paths
3853   # or as specified above
3854   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3855   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3856
3857   ########################################################
3858   # now see if we can find the gssapi libs in standard paths
3859   if test x"$have_gssapi" != x"yes"; then
3860      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3861      AC_CHECK_LIB_EXT(gss, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3862      AC_CHECK_FUNC_EXT(gss_wrap_iov, $KRB5_LIBS)
3863   fi
3864
3865   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3866   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3867   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3868   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3869   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3870   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3871   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3872   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3873   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3874   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3875   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3876   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3877   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3878   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3879   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3880   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3881   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3882   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3883   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3884   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3885   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3886   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3887   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3888   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3889   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3890   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3891   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3892   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3893   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3894   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3895   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3896   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3897   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3898   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3899   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3900   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3901   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3902   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3903   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3904   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3905   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3906   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3907   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3908   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_alloc, $KRB5_LIBS)
3909   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_set_impersonate, $KRB5_LIBS)
3910   AC_CHECK_FUNC_EXT(krb5_get_creds, $KRB5_LIBS)
3911   AC_CHECK_FUNC_EXT(krb5_get_credentials_for_user, $KRB5_LIBS)
3912   AC_CHECK_FUNC_EXT(krb5_get_host_realm, $KRB5_LIBS)
3913   AC_CHECK_FUNC_EXT(krb5_free_host_realm, $KRB5_LIBS)
3914   AC_CHECK_FUNC_EXT(gss_krb5_import_cred, $KRB5_LIBS)
3915   AC_CHECK_FUNC_EXT(gss_get_name_attribute, $KRB5_LIBS)
3916   AC_CHECK_FUNC_EXT(gss_mech_krb5, $KRB5_LIBS)
3917   AC_CHECK_FUNC_EXT(gss_oid_equal, $KRB5_LIBS)
3918   AC_CHECK_FUNC_EXT(gss_inquire_sec_context_by_oid, $KRB5_LIBS)
3919
3920   # This is for FreeBSD (and possibly others). gss_mech_krb5 is a
3921   # #define to GSS_KRB5_MECHANISM, which is defined in -lgssapi_krb5
3922   AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS, GSS_KRB5_MECHANISM,
3923                    [KRB5_LIBS="$KRB5_LIBS -lgssapi_krb5"])
3924
3925   # MIT krb5 1.8 does not expose this call (yet)
3926   AC_CHECK_DECLS(krb5_get_credentials_for_user, [], [], [#include <krb5.h>])
3927
3928   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3929   # but does have the symbol
3930   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3931
3932   LIBS="$KRB5_LIBS $LIBS"
3933
3934   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3935         smb_krb5_cv_ticket_has_keyinfo,
3936         [
3937             AC_TRY_COMPILE(
3938             [
3939                 #include <krb5.h>
3940             ],
3941             [
3942                 krb5_ticket ticket;
3943                 krb5_kvno kvno;
3944                 krb5_enctype enctype;
3945
3946                 enctype = ticket.enc_part.enctype;
3947                 kvno = ticket.enc_part.kvno;
3948             ],
3949             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3950             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3951         ])
3952
3953   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3954         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3955             [Whether the krb5_ticket structure contains the kvno and enctype])
3956   fi
3957
3958   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3959           smb_krb5_cv_creds_opt_free_context,
3960           [
3961                 AC_TRY_COMPILE([
3962                     #include <krb5.h>],
3963                     [
3964                         krb5_context ctx;
3965                         krb5_get_init_creds_opt *opt = NULL;
3966                         krb5_get_init_creds_opt_free(ctx, opt);
3967                     ],
3968                     [smb_krb5_cv_creds_opt_free_context=yes],
3969                     [smb_krb5_cv_creds_opt_free_context=no]
3970                 )
3971           ])
3972
3973   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3974         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3975             [Whether krb5_get_init_creds_opt_free takes a context argument])
3976   fi
3977
3978   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3979     AC_TRY_COMPILE([
3980         #include <krb5.h>],
3981         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3982         [smb_krb5_cv_verify_checksum=7],
3983         [smb_krb5_cv_verify_checksum=6],
3984     )
3985   ])
3986   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3987
3988   AC_CACHE_CHECK([for checksum in krb5_checksum],
3989                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3990     AC_TRY_COMPILE([#include <krb5.h>],
3991       [krb5_checksum cksum; cksum.checksum.length = 0;],
3992       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3993       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3994
3995   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3996     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3997                [Whether the krb5_checksum struct has a checksum property])
3998   fi
3999
4000   AC_CACHE_CHECK([for etype in EncryptedData],
4001                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
4002     AC_TRY_COMPILE([#include <krb5.h>],
4003       [EncryptedData edata; edata.etype = 0;],
4004       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
4005       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
4006
4007   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
4008     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
4009                [Whether the EncryptedData struct has a etype property])
4010   fi
4011
4012   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
4013                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
4014     AC_TRY_COMPILE([#include <krb5.h>],
4015       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
4016       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
4017       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
4018
4019   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
4020     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
4021                [Whether the krb5_ap_req struct has a ticket pointer])
4022   fi
4023
4024   AC_CACHE_CHECK([for e_data pointer in krb5_error],
4025                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
4026     AC_TRY_COMPILE([#include <krb5.h>],
4027       [krb5_error err; err.e_data = NULL;],
4028       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
4029       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
4030
4031   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
4032     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
4033                [Whether the krb5_error struct has a e_data pointer])
4034   fi
4035
4036   AC_CACHE_CHECK([for krb5_crypto type],
4037                 samba_cv_HAVE_KRB5_CRYPTO,[
4038     AC_TRY_COMPILE([#include <krb5.h>],
4039       [krb5_crypto crypto;],
4040       samba_cv_HAVE_KRB5_CRYPTO=yes,
4041       samba_cv_HAVE_KRB5_CRYPTO=no)])
4042
4043   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
4044     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
4045                [Whether the type krb5_crypto exists])
4046   fi
4047
4048   AC_CACHE_CHECK([for krb5_encrypt_block type],
4049                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
4050     AC_TRY_COMPILE([#include <krb5.h>],
4051       [krb5_encrypt_block block;],
4052       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
4053       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
4054
4055   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
4056     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
4057                [Whether the type krb5_encrypt_block exists])
4058   fi
4059
4060   AC_CACHE_CHECK([for addrtype in krb5_address],
4061                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
4062     AC_TRY_COMPILE([#include <krb5.h>],
4063       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
4064       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
4065       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
4066
4067   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
4068     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
4069                [Whether the krb5_address struct has a addrtype property])
4070   fi
4071
4072   AC_CACHE_CHECK([for addr_type in krb5_address],
4073                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
4074     AC_TRY_COMPILE([#include <krb5.h>],
4075       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
4076       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
4077       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
4078
4079   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
4080     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
4081               [Whether the krb5_address struct has a addr_type property])
4082   fi
4083
4084   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
4085                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
4086                  [AC_TRY_COMPILE([#include <krb5.h>],
4087     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
4088     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
4089
4090   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
4091     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
4092               [Whether the krb5_ticket struct has a enc_part2 property])
4093   fi
4094
4095   AC_CACHE_CHECK([for keyblock in krb5_creds],
4096                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
4097     AC_TRY_COMPILE([#include <krb5.h>],
4098       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
4099       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
4100       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
4101
4102   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
4103     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
4104               [Whether the krb5_creds struct has a keyblock property])
4105   fi
4106
4107   AC_CACHE_CHECK([for session in krb5_creds],
4108                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
4109     AC_TRY_COMPILE([#include <krb5.h>],
4110       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
4111       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
4112       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
4113
4114   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
4115     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
4116               [Whether the krb5_creds struct has a session property])
4117   fi
4118
4119   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
4120                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
4121     AC_TRY_COMPILE([#include <krb5.h>],
4122       [krb5_keyblock key; key.keyvalue.data = NULL;],
4123       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
4124       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
4125
4126   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
4127     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
4128               [Whether the krb5_keyblock struct has a keyvalue property])
4129   fi
4130
4131   found_arcfour_hmac=no
4132   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
4133                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
4134     AC_TRY_COMPILE([#include <krb5.h>],
4135       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
4136       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
4137       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
4138   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
4139                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
4140     AC_TRY_COMPILE([#include <krb5.h>],
4141       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
4142       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
4143       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
4144 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
4145 # w.r.t. arcfour and windows, so we must not enable it here
4146   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
4147           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
4148     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
4149               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type definition is available])
4150     found_arcfour_hmac=yes
4151   fi
4152   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC],
4153                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC,[
4154     AC_TRY_COMPILE([#include <krb5.h>],
4155       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC;],
4156       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=yes,
4157       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=no)])
4158   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC" = x"yes"; then
4159     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC,1,
4160               [Whether the ENCTYPE_ARCFOUR_HMAC key type definition is available])
4161     found_arcfour_hmac=yes
4162   fi
4163
4164   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
4165                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
4166     AC_TRY_COMPILE([#include <krb5.h>],
4167       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
4168       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
4169       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
4170
4171   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
4172     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
4173               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
4174   fi
4175
4176   AC_CACHE_CHECK([for KV5M_KEYTAB],
4177                  samba_cv_HAVE_KV5M_KEYTAB,[
4178     AC_TRY_COMPILE([#include <krb5.h>],
4179       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
4180       samba_cv_HAVE_KV5M_KEYTAB=yes,
4181       samba_cv_HAVE_KV5M_KEYTAB=no)])
4182
4183   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
4184       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
4185              [Whether the KV5M_KEYTAB option is available])
4186   fi
4187
4188   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
4189                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
4190     AC_TRY_COMPILE([#include <krb5.h>],
4191       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
4192       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
4193       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
4194
4195   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
4196     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
4197               [Whether KRB5_KU_OTHER_CKSUM is available])
4198   fi
4199
4200   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
4201                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
4202     AC_TRY_COMPILE([#include <krb5.h>],
4203       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
4204       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
4205       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
4206
4207   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
4208     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
4209               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
4210   fi
4211
4212   AC_CACHE_CHECK([for the krb5_princ_component macro],
4213                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
4214     AC_TRY_LINK([#include <krb5.h>],
4215       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
4216       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
4217       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
4218
4219   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
4220     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
4221                [Whether krb5_princ_component is available])
4222   fi
4223
4224   AC_CACHE_CHECK([for key in krb5_keytab_entry],
4225                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
4226     AC_TRY_COMPILE([#include <krb5.h>],
4227       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
4228       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
4229       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
4230
4231   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
4232     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
4233               [Whether krb5_keytab_entry has key member])
4234   fi
4235
4236   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
4237                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
4238     AC_TRY_COMPILE([#include <krb5.h>],
4239       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
4240       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
4241       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
4242
4243   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
4244     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
4245               [Whether krb5_keytab_entry has keyblock member])
4246   fi
4247
4248   AC_CACHE_CHECK([for magic in krb5_address],
4249                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
4250     AC_TRY_COMPILE([#include <krb5.h>],
4251       [krb5_address addr; addr.magic = 0;],
4252       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
4253       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
4254
4255   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
4256     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
4257               [Whether the krb5_address struct has a magic property])
4258   fi
4259
4260   AC_CACHE_CHECK([for WRFILE: keytab support],
4261                 samba_cv_HAVE_WRFILE_KEYTAB,[
4262     AC_TRY_RUN([
4263 #include<krb5.h>
4264   main()
4265   {
4266     krb5_context context;
4267     krb5_keytab keytab;
4268
4269     krb5_init_context(&context);
4270     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
4271   }],
4272   samba_cv_HAVE_WRFILE_KEYTAB=yes,
4273   samba_cv_HAVE_WRFILE_KEYTAB=no)])
4274
4275   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
4276       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
4277                [Whether the WRFILE:-keytab is supported])
4278   fi
4279
4280   AC_CACHE_CHECK([for krb5_realm type],
4281                 samba_cv_HAVE_KRB5_REALM_TYPE,[
4282     AC_TRY_COMPILE([#include <krb5.h>],
4283       [krb5_realm realm;],
4284       samba_cv_HAVE_KRB5_REALM_TYPE=yes,
4285       samba_cv_HAVE_KRB5_REALM_TYPE=no)])
4286
4287   if test x"$samba_cv_HAVE_KRB5_REALM_TYPE" = x"yes"; then
4288     AC_DEFINE(HAVE_KRB5_REALM_TYPE,1,
4289                [Whether the type krb5_realm exists])
4290   fi
4291
4292   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
4293                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
4294     AC_TRY_COMPILE([#include <krb5.h>],
4295     [
4296     krb5_context context;
4297     krb5_principal principal;
4298     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
4299     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
4300     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
4301
4302   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
4303     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
4304               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
4305   fi
4306
4307   AC_CACHE_CHECK([for krb5_addresses type],
4308                 samba_cv_HAVE_KRB5_ADDRESSES,[
4309     AC_TRY_COMPILE([#include <krb5.h>],
4310       [krb5_addresses addr;],
4311       samba_cv_HAVE_KRB5_ADDRESSES=yes,
4312       samba_cv_HAVE_KRB5_ADDRESSES=no)])
4313
4314   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
4315     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
4316                [Whether the type krb5_addresses type exists])
4317   fi
4318
4319   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
4320                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
4321     AC_TRY_COMPILE([#include <krb5.h>],
4322     [
4323     krb5_mk_error(0,0,0);],
4324     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
4325     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
4326
4327   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
4328     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
4329               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
4330   fi
4331
4332   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
4333     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
4334         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
4335         AC_TRY_RUN_STRICT([
4336                 #include <stdlib.h>
4337                 #include <krb5.h>
4338                 int main(void) {
4339                         krb5_context context = NULL;
4340                         char *str = NULL;
4341                         krb5_enctype_to_string(context, 1, &str);
4342                         if (str) free (str); 
4343                         return 0;
4344                 }
4345                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4346                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
4347                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
4348
4349     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4350       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4351                 [whether krb5_enctype_to_string takes krb5_context argument])
4352     fi
4353
4354     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4355         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
4356         AC_TRY_RUN_STRICT([
4357                 #include <krb5.h>
4358                 int main(void) {
4359                         char buf[256];
4360                         krb5_enctype_to_string(1, buf, 256);
4361                         return 0;
4362                 }
4363                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4364                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
4365                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
4366
4367     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
4368       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4369                 [whether krb5_enctype_to_string takes size_t argument])
4370     fi
4371   fi
4372
4373   AC_CACHE_CHECK([for krb5_principal_get_realm],
4374                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4375     AC_TRY_LINK([#include <krb5.h>],
4376       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4377       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4378       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4379
4380   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4381     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4382                [Whether the function krb5_principal_get_realm is defined])
4383   fi
4384
4385   AC_CACHE_CHECK([for krb5_princ_realm],
4386                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4387     AC_TRY_LINK([#include <krb5.h>],
4388       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
4389       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
4390       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
4391
4392   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
4393     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
4394                [Whether the macro krb5_princ_realm is defined])
4395   fi
4396
4397   #
4398   #
4399   # Now the decisions whether we can support krb5
4400   #
4401   # NOTE: all tests should be done before this block!
4402   #
4403   #
4404   if test x"$found_arcfour_hmac" != x"yes"; then
4405     AC_MSG_WARN(arcfour-hmac-md5 encryption type not found in -lkrb5)
4406     use_ads=no
4407   fi
4408
4409   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4410     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4411     use_ads=no
4412   fi
4413
4414   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
4415           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
4416   then
4417     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4418     use_ads=no
4419   fi
4420
4421   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4422           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4423   then
4424     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4425     use_ads=no
4426   fi
4427
4428   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4429           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4430   then
4431     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4432     use_ads=no
4433   fi
4434
4435   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
4436           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
4437   then
4438     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
4439     use_ads=no
4440   fi
4441
4442   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
4443
4444       # We only need the following functions if we can't get the enctype
4445       # and kvno out of the ticket directly (ie. on Heimdal).
4446
4447       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
4448       then
4449         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
4450         use_ads=no
4451       fi
4452
4453       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
4454       then
4455         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
4456         use_ads=no
4457       fi
4458
4459   fi
4460
4461   if test x"$use_ads" = x"yes"; then
4462     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4463     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4464     if test x"$have_gssapi" = x"yes"; then
4465       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
4466     fi
4467   else
4468     if test x"$with_ads_support" = x"yes"; then
4469         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4470     else
4471         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4472     fi
4473     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4474     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4475     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4476     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4477     KRB5_LIBS=""
4478     with_ads_support=no
4479   fi
4480   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4481   AC_MSG_RESULT([$use_ads])
4482
4483 LIBS="$ac_save_LIBS"
4484 fi
4485
4486 if test x"$use_ads" != xyes; then
4487         smbtorture4_possible=no
4488 fi
4489
4490 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4491 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4492
4493
4494 ########################################################
4495 # Compile with DNS Updates support?
4496
4497 with_dnsupdate_support=auto
4498 AC_MSG_CHECKING([whether to enable DNS Updates support])
4499
4500 AC_ARG_WITH(dnsupdate,
4501 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default=auto)])],
4502 [ case "$withval" in
4503     yes|no)
4504         with_dnsupdate_support=$withval
4505         ;;
4506   esac ])
4507
4508 AC_MSG_RESULT($with_dnsupdate_support)
4509
4510 if test x"$with_dnsupdate_support" != x"no"; then
4511
4512   ################################################################
4513   # first test for AD / GSSAPI support being enabled
4514         if test x"$have_gssapi" != xyes ; then
4515                 if test x"$with_dnsupdate_support" = x"yes" ; then
4516                         AC_MSG_ERROR(DNS Updates support only possible with AD and GSSAPI support)
4517                 else
4518                         AC_MSG_NOTICE(DNS Updates support only possible with AD and GSSAPI support)
4519                         with_dnsupdate_support=no
4520                 fi
4521         fi
4522   ##################################################################
4523   # then test for uuid.h (necessary to generate unique DNS keynames
4524   # (uuid.h is required for this test)
4525         AC_CHECK_HEADERS(uuid/uuid.h)
4526
4527         
4528         if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4529                 if test x"$with_dnsupdate_support" = x"yes"; then
4530                         AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4531                 else
4532                         AC_MSG_NOTICE(uuid.h is needed to enable DNS Updates support)
4533                 fi
4534                 with_dnsupdate_support=no
4535         fi
4536 fi
4537
4538 if test x"$with_dnsupdate_support" != x"no"; then
4539
4540   ########################################################
4541   # Now see if we can find the uuid libs in standard paths
4542   # On some systems, the uuid API is in libc, so we have to
4543   # be careful not to insert a spurious -luuid.
4544
4545   UUID_LIBS=""
4546   AC_LIBTESTFUNC(uuid, uuid_generate,
4547           [
4548             case " $LIBS " in
4549                 *\ -luuid\ *)
4550                 UUID_LIBS="-luuid"
4551                 SMB_REMOVE_LIB(uuid)
4552                 ;;
4553             esac
4554
4555             with_dnsupdate_support=yes
4556             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4557         ],
4558         [
4559             if test x"$with_dnsupdate_support" = x"yes"; then
4560                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4561             else
4562                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4563             fi
4564             with_dnsupdate_support=no
4565         ])
4566 fi
4567   # finally print out the result:
4568 AC_MSG_CHECKING(whether DNS Updates support is used)
4569 AC_MSG_RESULT([$with_dnsupdate_support])
4570
4571
4572 #################################################
4573 # check for automount support
4574 AC_MSG_CHECKING(whether to use automount)
4575 AC_ARG_WITH(automount,
4576 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4577 [ case "$withval" in
4578   yes)
4579     AC_MSG_RESULT(yes)
4580     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4581     ;;
4582   *)
4583     AC_MSG_RESULT(no)
4584     ;;
4585   esac ],
4586   AC_MSG_RESULT(no)
4587 )
4588
4589 #################################################
4590 # Check for a PAM clear-text auth, accounts, password
4591 # and session support. Most PAM implementations keep their
4592 # headers in /usr/include/security. Darwin keeps its in
4593 # /usr/include/pam.
4594
4595 with_pam_for_crypt=no
4596 try_pam=auto
4597 AC_MSG_CHECKING(whether to try PAM support)
4598 AC_ARG_WITH(pam,
4599 [AS_HELP_STRING([--with-pam], [Include PAM support (default=auto)])],
4600 [ case "$withval" in
4601   yes|no|auto)
4602     try_pam=$withval
4603     ;;
4604   esac
4605 ])
4606 AC_MSG_RESULT([$try_pam])
4607
4608 use_pam=no
4609 create_pam_modules=no
4610 if test x"${try_pam}" != x"no";then
4611         use_pam=yes
4612         create_pam_modules=yes
4613
4614         # Most systems have PAM headers in /usr/include/security, but Darwin
4615         # has them in /usr/include/pam.
4616         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4617         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4618                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4619                 if test x"${try_pam}" = x"yes";then
4620                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4621                 fi
4622                 use_pam=no
4623                 create_pam_modules=no
4624         fi
4625
4626         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4627         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4628                 if test x"${try_pam}" = x"yes";then
4629                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4630                 fi
4631                 use_pam=no
4632                 create_pam_modules=no
4633         fi
4634
4635         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4636                 #if HAVE_SECURITY_PAM_APPL_H
4637                 #include <security/pam_appl.h>
4638                 #endif
4639                 #if HAVE_PAM_PAM_APPL_H
4640                 #include <pam/pam_appl.h>
4641                 #endif
4642         ]])
4643         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4644                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4645                 if test x"${try_pam}" = x"yes";then
4646                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4647        fi
4648                 create_pam_modules=no
4649     fi
4650
4651         if test x"$use_pam" = x"yes"; then
4652     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4653                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4654                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4655     with_pam_for_crypt=yes
4656
4657                 if test x"$create_pam_modules" = x"yes"; then
4658                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4659                         # this checks are optional,
4660                         # we don't care about the results here
4661                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4662                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4663                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4664                 else
4665                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4666                 fi
4667         fi
4668         AC_MSG_CHECKING(whether to use PAM support)
4669         AC_MSG_RESULT([$use_pam])
4670
4671         AC_MSG_CHECKING(whether to have PAM MODULES support)
4672         AC_MSG_RESULT([$create_pam_modules])
4673
4674         AC_TRY_COMPILE([
4675                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4676                 #include <security/pam_appl.h>
4677                 #elif defined(HAVE_PAM_PAM_APPL_H)
4678                 #include <pam/pam_appl.h>
4679                 #endif],[
4680                 pam_set_item(0, PAM_RHOST, 0);
4681                 ],
4682                 AC_DEFINE(HAVE_PAM_RHOST, 1,
4683                           [Define to 1 if PAM_RHOST is available]),[])
4684
4685         AC_TRY_COMPILE([
4686                 #if defined(HAVE_SECURITY_PAM_APPL_H)
4687                 #include <security/pam_appl.h>
4688                 #elif defined(HAVE_PAM_PAM_APPL_H)
4689                 #include <pam/pam_appl.h>
4690                 #endif],[
4691                 pam_set_item(0, PAM_TTY, 0);
4692                 ],
4693                 AC_DEFINE(HAVE_PAM_TTY, 1,
4694                           [Define to 1 if PAM_TTY is available]),[])
4695
4696 fi # try_pam != no
4697
4698 #################################################
4699 # check for PAM_RADIO_TYPE
4700 AC_TRY_COMPILE([
4701 #if (!defined(LINUX))
4702
4703 #define PAM_EXTERN extern
4704 #if defined(HAVE_SECURITY_PAM_APPL_H)
4705 #include <security/pam_appl.h>
4706 #elif defined(HAVE_PAM_PAM_APPL_H)
4707 #include <pam/pam_appl.h>
4708 #endif
4709
4710 #endif
4711
4712 #if defined(HAVE_SECURITY_PAM_MODULES_H)
4713 #include <security/pam_modules.h>
4714 #elif defined(HAVE_PAM_PAM_MODULES_H)
4715 #include <pam/pam_modules.h>
4716 #endif
4717
4718 #if defined(HAVE_SECURITY__PAM_MACROS_H)
4719 #include <security/_pam_macros.h>
4720 #elif defined(HAVE_PAM__PAM_MACROS_H)
4721 #include <pam/_pam_macros.h>
4722 #endif
4723
4724 #ifdef HAVE_SECURITY_PAM_EXT_H
4725 #include <security/pam_ext.h>
4726 #endif
4727 ],
4728 [int i; i = PAM_RADIO_TYPE; ],
4729 AC_DEFINE(HAVE_PAM_RADIO_TYPE, 1, [Define to 1 if PAM_RADIO_TYPE is available]),[])
4730
4731 #################################################
4732 # check for pam_smbpass support
4733 PAM_MODULES=""
4734 INSTALL_PAM_MODULES=""
4735 UNINSTALL_PAM_MODULES=""
4736
4737 try_pam_smbpass=auto
4738 AC_MSG_CHECKING(whether to use pam_smbpass)
4739 AC_ARG_WITH(pam_smbpass,
4740 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=auto)])],
4741 [ case "$withval" in
4742   yes|no|auto)
4743     try_pam_smbpass=$withval
4744   ;;
4745   *)
4746     AC_MSG_ERROR([valid options are yes,no,auto])
4747   ;;
4748   esac
4749 ])
4750
4751 if test x"${try_pam_smbpass}" = xno ; then
4752         use_pam_smbpass=no
4753 else
4754         use_pam_smbpass=yes
4755         # Conditions under which pam_smbpass can't be built.
4756         if test x"$BLDSHARED" != xtrue ; then
4757                 if test x"${try_pam_smbpass}" = xyes ; then
4758                         AC_MSG_ERROR([No support for shared modules])
4759                 fi
4760                 use_pam_smbpass=no
4761         elif test x"$create_pam_modules" != xyes ; then
4762                 if test x"${try_pam_smbpass}" = xyes ; then
4763                         AC_MSG_ERROR([No support for PAM MODULES])
4764                 fi
4765                 use_pam_smbpass=no
4766         fi
4767
4768         if test x"${use_pam_smbpass}" = xyes ; then 
4769                 PAM_MODULES="pam_smbpass"
4770                 INSTALL_PAM_MODULES="installpammodules"
4771                 UNINSTALL_PAM_MODULES="uninstallpammodules"
4772         fi
4773 fi
4774 AC_MSG_RESULT([$use_pam_smbpass])
4775
4776
4777 ##
4778 ## moved after the check for -lcrypt in order to
4779 ## ensure that the necessary libraries are included
4780 ## check checking for truncated salt.  Wrapped by the
4781 ## $with_pam_for_crypt variable as above   --jerry
4782 ##
4783 if test $with_pam_for_crypt = no; then
4784 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4785 crypt_LIBS="$LIBS"
4786 LIBS="$AUTH_LIBS $LIBS"
4787 AC_TRY_RUN([#include "${srcdir-.}/../tests/crypttest.c"],
4788         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4789 LIBS="$crypt_LIBS"])
4790 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4791         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4792 fi
4793 fi
4794
4795 #################################################
4796 # check for a NISPLUS_HOME support
4797 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4798 AC_ARG_WITH(nisplus-home,
4799 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4800 [ case "$withval" in
4801   yes)
4802     AC_MSG_RESULT(yes)
4803     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4804     ;;
4805   *)
4806     AC_MSG_RESULT(no)
4807     ;;
4808   esac ],
4809   AC_MSG_RESULT(no)
4810 )
4811
4812 #################################################
4813 # check for syslog logging
4814 AC_MSG_CHECKING(whether to use syslog logging)
4815 AC_ARG_WITH(syslog,
4816 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4817 [ case "$withval" in
4818   yes)
4819     AC_MSG_RESULT(yes)
4820     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4821     ;;
4822   *)
4823     AC_MSG_RESULT(no)
4824     ;;
4825   esac ],
4826   AC_MSG_RESULT(no)
4827 )
4828
4829 #################################################
4830 # check for custom syslog facility
4831 AC_MSG_CHECKING(whether to use a custom syslog facility)
4832 AC_ARG_WITH(syslog-facility,
4833 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4834 [
4835   if test "$withval" = "no" ; then
4836     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4837   else
4838      if test "$withval" != "yes" ; then
4839         syslog_facility="$withval"
4840         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4841      fi
4842   fi
4843 ])
4844
4845 #################################################
4846 # check for experimental disk-quotas support
4847
4848 samba_cv_WITH_QUOTAS=auto
4849 samba_cv_TRY_QUOTAS=no
4850 samba_cv_RUN_QUOTA_TESTS=auto
4851 samba_cv_WITH_SYS_QUOTAS=auto
4852 samba_cv_TRY_SYS_QUOTAS=auto
4853 samba_cv_SYSQUOTA_FOUND=no
4854
4855 AC_MSG_CHECKING(whether to try disk-quotas support)
4856 AC_ARG_WITH(quotas,
4857 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4858 [ case "$withval" in
4859   yes)
4860     AC_MSG_RESULT(yes)
4861     samba_cv_WITH_QUOTAS=yes
4862     samba_cv_TRY_QUOTAS=yes
4863     samba_cv_RUN_QUOTA_TESTS=yes
4864     #set sys quotas to auto in this case
4865     samba_cv_TRY_SYS_QUOTAS=auto
4866     ;;
4867   auto)
4868     AC_MSG_RESULT(auto)
4869     samba_cv_WITH_QUOTAS=auto
4870     samba_cv_TRY_QUOTAS=auto
4871     samba_cv_RUN_QUOTA_TESTS=auto
4872     #set sys quotas to auto in this case
4873     samba_cv_TRY_SYS_QUOTAS=auto
4874     ;;
4875   no)
4876     AC_MSG_RESULT(no)
4877     samba_cv_WITH_QUOTAS=no
4878     samba_cv_TRY_QUOTAS=no
4879     samba_cv_RUN_QUOTA_TESTS=no
4880     ;;
4881   *)
4882     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4883     ;;
4884   esac ],
4885   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4886 )
4887
4888 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4889 AC_ARG_WITH(sys-quotas,
4890 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4891 [ case "$withval" in
4892   yes)
4893     AC_MSG_RESULT(yes)
4894     samba_cv_WITH_SYS_QUOTAS=yes
4895     samba_cv_TRY_SYS_QUOTAS=yes
4896     samba_cv_RUN_QUOTA_TESTS=yes
4897     ;;
4898   auto)
4899     AC_MSG_RESULT(auto)
4900     samba_cv_WITH_SYS_QUOTAS=auto
4901     samba_cv_TRY_SYS_QUOTAS=auto
4902     samba_cv_RUN_QUOTA_TESTS=auto
4903     ;;
4904   no)
4905     AC_MSG_RESULT(no)
4906     samba_cv_WITH_SYS_QUOTAS=no
4907     samba_cv_TRY_SYS_QUOTAS=no
4908     ;;
4909   *)
4910     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4911     ;;
4912   esac ],
4913   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4914 )
4915
4916 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4917 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4918   case "$host_os" in
4919         *linux*)
4920             AC_MSG_RESULT(yes)
4921             samba_cv_TRY_SYS_QUOTAS=yes
4922             samba_cv_RUN_QUOTA_TESTS=yes
4923             ;;
4924         *)
4925             AC_MSG_RESULT(no)
4926             samba_cv_TRY_SYS_QUOTAS=no
4927             ;;
4928   esac
4929 fi
4930
4931 #############################################
4932 # only check for quota stuff if --with-quotas
4933 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4934
4935 case "$host_os" in
4936         # on linux we didn't need to test we have builtin support
4937         *linux*)
4938             samba_cv_SYSQUOTA_FOUND=yes
4939             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4940             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4941             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4942             AC_MSG_RESULT(yes)
4943
4944             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4945             samba_cv_found_xfs_header=yes
4946             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4947             AC_MSG_RESULT(yes)
4948             ;;
4949         *solaris*)
4950             # need to set this define when using static linking (BUG 1473)
4951             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4952             ;;
4953         *)
4954             ;;
4955 esac
4956
4957 # some broken header files need this
4958 AC_CHECK_HEADER(asm/types.h,[
4959             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4960             AC_ADD_INCLUDE(<asm/types.h>)
4961             ])
4962
4963 # For quotas on Veritas VxFS filesystems
4964 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4965
4966 # For quotas on Linux XFS filesystems
4967 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4968
4969 # For sys/quota.h and linux/quota.h
4970 AC_CHECK_HEADERS(sys/quota.h)
4971
4972 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4973 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4974 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4975 AC_TRY_COMPILE([
4976 #include "confdefs.h"
4977 #ifdef HAVE_SYS_TYPES_H
4978 #include <sys/types.h>
4979 #endif
4980 #ifdef HAVE_ASM_TYPES_H
4981 #include <asm/types.h>
4982 #endif
4983 #include <sys/quota.h>
4984 ],[int i = Q_XGETQUOTA;],
4985 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4986 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4987         samba_cv_found_xfs_header=yes
4988 fi
4989 fi
4990
4991 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4992 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4993 AC_TRY_COMPILE([
4994 #include "confdefs.h"
4995 #ifdef HAVE_SYS_QUOTA_H
4996 #include <sys/quota.h>
4997 #endif
4998 ],[
4999 struct dqblk D;
5000 D.dqb_fsoftlimit = 0;],
5001 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
5002 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
5003         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
5004 fi
5005
5006 ##################
5007 # look for a working quota system
5008
5009 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
5010 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
5011 AC_TRY_RUN_STRICT([
5012 #define HAVE_QUOTACTL_4A 1
5013 #define AUTOCONF_TEST 1
5014 #include "confdefs.h"
5015 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
5016            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
5017 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
5018     samba_cv_SYSQUOTA_FOUND=yes;
5019     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
5020     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
5021 fi
5022 fi
5023
5024 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
5025 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
5026 AC_TRY_RUN_STRICT([
5027 #define HAVE_QUOTACTL_4B 1
5028 #define AUTOCONF_TEST 1
5029 #include "confdefs.h"
5030 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
5031            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
5032 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
5033     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
5034     samba_cv_SYSQUOTA_FOUND=yes;
5035     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
5036     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
5037 fi
5038 fi
5039
5040 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
5041 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
5042 AC_TRY_RUN_STRICT([
5043 #define HAVE_QUOTACTL_3 1
5044 #define AUTOCONF_TEST 1
5045 #include "confdefs.h"
5046 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
5047            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
5048 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
5049     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
5050     samba_cv_SYSQUOTA_FOUND=yes;
5051     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
5052     samba_cv_sysquotas_file="lib/sysquotas_3.c"
5053 fi
5054 fi
5055
5056 #################################################
5057 # check for mntent.h and struct mntent
5058 AC_CHECK_HEADERS(mntent.h)
5059 #################################################
5060 # check for setmntent,getmntent,endmntent
5061 AC_CHECK_FUNCS(setmntent getmntent endmntent)
5062
5063 #################################################
5064 # check for devnm.h and struct mntent
5065 AC_CHECK_HEADERS(devnm.h)
5066 #################################################
5067 # check for devnm
5068 AC_CHECK_FUNCS(devnm)
5069
5070 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
5071     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
5072         # if --with-sys-quotas=yes then build it
5073         # you have can use the get/set quota command smb.conf
5074         # options then
5075         samba_cv_SYSQUOTA_FOUND=auto
5076     fi
5077     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
5078         # if --with-sys-quotas=yes then build it
5079         # you have can use the get/set quota command smb.conf
5080         # options then
5081         samba_cv_TRY_SYS_QUOTAS=auto
5082     fi
5083 fi
5084
5085 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
5086 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
5087 SAVE_CPPFLAGS="$CPPFLAGS"
5088 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5089 AC_TRY_COMPILE([
5090 #include "confdefs.h"
5091 #define NO_PROTO_H 1
5092 #define NO_CONFIG_H 1
5093 #define HAVE_SYS_QUOTAS 1
5094 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
5095 #include "${srcdir-.}/lib/sysquotas.c"
5096 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
5097 CPPFLAGS="$SAVE_CPPFLAGS"
5098 ])
5099 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
5100 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
5101     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
5102         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
5103         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
5104         samba_cv_WE_USE_SYS_QUOTAS=yes
5105         AC_MSG_RESULT(yes)
5106     else
5107         AC_MSG_RESULT(no)
5108     fi
5109 fi
5110 fi
5111
5112 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
5113 AC_CACHE_CHECK([whether the sys_quota interface works with NFS],samba_cv_SYSQUOTA_WORKS_NFS,[
5114 SAVE_CPPFLAGS="$CPPFLAGS"
5115 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5116 AC_TRY_COMPILE([
5117 #include "confdefs.h"
5118 #define NO_PROTO_H 1
5119 #define NO_CONFIG_H 1
5120 #define HAVE_SYS_QUOTAS 1
5121 #define HAVE_NFS_QUOTAS 1
5122 #include "${srcdir-.}/lib/sysquotas_nfs.c"
5123 ],[],samba_cv_SYSQUOTA_WORKS_NFS=yes,samba_cv_SYSQUOTA_WORKS_NFS=no)
5124 CPPFLAGS="$SAVE_CPPFLAGS"
5125 ])
5126 if test x"$samba_cv_SYSQUOTA_WORKS_NFS" = x"yes"; then
5127     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
5128         AC_DEFINE(HAVE_NFS_QUOTAS,1,[Whether nfs quota support is available])
5129     fi
5130 fi
5131 fi
5132
5133 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
5134 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
5135 SAVE_CPPFLAGS="$CPPFLAGS"
5136 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5137 AC_TRY_COMPILE([
5138 #include "confdefs.h"
5139 #define NO_PROTO_H 1
5140 #define NO_CONFIG_H 1
5141 #define HAVE_SYS_QUOTAS 1
5142 #define HAVE_XFS_QUOTAS 1
5143 #include "${srcdir-.}/lib/sysquotas_xfs.c"
5144 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
5145 CPPFLAGS="$SAVE_CPPFLAGS"
5146 ])
5147 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
5148     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
5149         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
5150     fi
5151 fi
5152 fi
5153
5154 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
5155 SAVE_CPPFLAGS="$CPPFLAGS"
5156 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5157 AC_TRY_COMPILE([
5158 #include "confdefs.h"
5159 #define NO_PROTO_H 1
5160 #define NO_CONFIG_H 1
5161 #include "${srcdir-.}/smbd/quotas.c"
5162 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
5163 CPPFLAGS="$SAVE_CPPFLAGS"
5164 ])
5165 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
5166 AC_MSG_CHECKING(whether to use the old quota support)
5167     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
5168       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
5169         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
5170         AC_MSG_RESULT(yes)
5171       else
5172         AC_MSG_RESULT(no)
5173       fi
5174     else
5175       AC_MSG_RESULT(no)
5176     fi
5177 fi
5178
5179 ####################
5180 # End of quota check samba_cv_RUN_QUOTA_TESTS
5181 fi
5182
5183 #################################################
5184 # check for experimental utmp accounting
5185
5186 AC_MSG_CHECKING(whether to support utmp accounting)
5187 WITH_UTMP=yes
5188 AC_ARG_WITH(utmp,
5189 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
5190 [ case "$withval" in
5191   no)
5192                 WITH_UTMP=no
5193                 ;;
5194   *)
5195                 WITH_UTMP=yes
5196                 ;;
5197   esac ],
5198 )
5199
5200 # utmp requires utmp.h
5201 # Note similar check earlier, when checking utmp details.
5202
5203 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
5204         utmp_no_reason=", no utmp.h on $host_os"
5205         WITH_UTMP=no
5206 fi
5207
5208 # Display test results
5209
5210 if test x"$WITH_UTMP" = x"yes"; then
5211         AC_MSG_RESULT(yes)
5212         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
5213 else
5214         AC_MSG_RESULT(no$utmp_no_reason)
5215 fi
5216
5217
5218 #################################################
5219 # these tests are taken from the GNU fileutils package
5220 AC_CHECKING(how to get filesystem space usage)
5221 space=no
5222
5223 # Test for statvfs64.
5224 if test $space = no; then
5225   # SVR4
5226   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
5227   [AC_TRY_RUN([
5228 #if defined(HAVE_UNISTD_H)
5229 #include <unistd.h>
5230 #endif
5231 #include <sys/types.h>
5232 #include <sys/statvfs.h>
5233   main ()
5234   {
5235     struct statvfs64 fsd;
5236     exit (statvfs64 (".", &fsd));
5237   }],
5238   fu_cv_sys_stat_statvfs64=yes,
5239   fu_cv_sys_stat_statvfs64=no,
5240   fu_cv_sys_stat_statvfs64=cross)])
5241   if test $fu_cv_sys_stat_statvfs64 = yes; then
5242     space=yes
5243     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
5244   fi
5245 fi
5246
5247 # Perform only the link test since it seems there are no variants of the
5248 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
5249 # because that got a false positive on SCO OSR5.  Adding the declaration
5250 # of a `struct statvfs' causes this test to fail (as it should) on such
5251 # systems.  That system is reported to work fine with STAT_STATFS4 which
5252 # is what it gets when this test fails.
5253 if test $space = no; then
5254   # SVR4
5255   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
5256                  [AC_TRY_LINK([#include <sys/types.h>
5257 #include <sys/statvfs.h>],
5258                               [struct statvfs fsd; statvfs (0, &fsd);],
5259                               fu_cv_sys_stat_statvfs=yes,
5260                               fu_cv_sys_stat_statvfs=no)])
5261   if test $fu_cv_sys_stat_statvfs = yes; then
5262     space=yes
5263     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
5264   fi
5265 fi
5266
5267 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
5268 # This is not the case on ancient Linux systems.
5269
5270 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
5271     AC_TRY_COMPILE([#include <sys/types.h>
5272 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
5273         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
5274 if test x"$samba_cv_fsid_int" = x"yes"; then
5275     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
5276 fi
5277
5278 # fsusage.c assumes that statvfs has an f_frsize entry. Some weird
5279 # systems use f_bsize.
5280 AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [
5281     AC_TRY_COMPILE([#include <sys/types.h>
5282 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0],
5283         samba_cv_frsize=yes,samba_cv_frsize=no)])
5284 if test x"$samba_cv_frsize" = x"yes"; then
5285     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
5286 fi
5287
5288 # Some systems use f_flag in struct statvfs while others use f_flags
5289 AC_CACHE_CHECK([that statvfs.statvfs_f_flag works],samba_cv_statvfs_f_flag, [
5290     AC_TRY_COMPILE([#include <sys/types.h>
5291 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flag = 0],
5292         samba_cv_statvfs_f_flag=yes,samba_cv_statvfs_f_flag=no)])
5293 if test x"$samba_cv_statvfs_f_flag" = x"yes"; then
5294     AC_DEFINE(HAVE_STATVFS_F_FLAG, 1, [Whether statvfs.f_flag exists])
5295 fi
5296
5297 AC_CACHE_CHECK([that statvfs.statvfs_f_flags works],samba_cv_statvfs_f_flags, [
5298     AC_TRY_COMPILE([#include <sys/types.h>
5299 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flags = 0],
5300         samba_cv_statvfs_f_flags=yes,samba_cv_statvfs_f_flags=no)])
5301 if test x"$samba_cv_statvfs_f_flags" = x"yes"; then
5302     AC_DEFINE(HAVE_STATVFS_F_FLAGS, 1, [Whether statvfs.f_flags exists])
5303 fi
5304
5305 if test $space = no; then
5306   # DEC Alpha running OSF/1
5307   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
5308   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
5309   [AC_TRY_RUN([
5310 #include <sys/param.h>
5311 #include <sys/types.h>
5312 #include <sys/mount.h>
5313   main ()
5314   {
5315     struct statfs fsd;
5316     fsd.f_fsize = 0;
5317     exit (statfs (".", &fsd, sizeof (struct statfs)));
5318   }],
5319   fu_cv_sys_stat_statfs3_osf1=yes,
5320   fu_cv_sys_stat_statfs3_osf1=no,
5321   fu_cv_sys_stat_statfs3_osf1=no)])
5322   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5323   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5324     space=yes
5325     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5326   fi
5327 fi
5328
5329 if test $space = no; then
5330 # AIX
5331   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5332 member (AIX, 4.3BSD)])
5333   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5334   [AC_TRY_RUN([
5335 #ifdef HAVE_SYS_PARAM_H
5336 #include <sys/param.h>
5337 #endif
5338 #ifdef HAVE_SYS_MOUNT_H
5339 #include <sys/mount.h>
5340 #endif
5341 #ifdef HAVE_SYS_VFS_H
5342 #include <sys/vfs.h>
5343 #endif
5344   main ()
5345   {
5346   struct statfs fsd;
5347   fsd.f_bsize = 0;
5348   exit (statfs (".", &fsd));
5349   }],
5350   fu_cv_sys_stat_statfs2_bsize=yes,
5351   fu_cv_sys_stat_statfs2_bsize=no,
5352   fu_cv_sys_stat_statfs2_bsize=no)])
5353   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5354   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5355     space=yes
5356     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5357   fi
5358 fi
5359
5360 if test $space = no; then
5361 # SVR3
5362   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5363   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5364   [AC_TRY_RUN([#include <sys/types.h>
5365 #include <sys/statfs.h>
5366   main ()
5367   {
5368   struct statfs fsd;
5369   exit (statfs (".", &fsd, sizeof fsd, 0));
5370   }],
5371     fu_cv_sys_stat_statfs4=yes,
5372     fu_cv_sys_stat_statfs4=no,
5373     fu_cv_sys_stat_statfs4=no)])
5374   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5375   if test $fu_cv_sys_stat_statfs4 = yes; then
5376     space=yes
5377     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5378   fi
5379 fi
5380
5381 if test $space = no; then
5382 # 4.4BSD and NetBSD
5383   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5384 member (4.4BSD and NetBSD)])
5385   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5386   [AC_TRY_RUN([#include <sys/types.h>
5387 #ifdef HAVE_SYS_PARAM_H
5388 #include <sys/param.h>
5389 #endif
5390 #ifdef HAVE_SYS_MOUNT_H
5391 #include <sys/mount.h>
5392 #endif
5393   main ()
5394   {
5395   struct statfs fsd;
5396   fsd.f_fsize = 0;
5397   exit (statfs (".", &fsd));
5398   }],
5399   fu_cv_sys_stat_statfs2_fsize=yes,
5400   fu_cv_sys_stat_statfs2_fsize=no,
5401   fu_cv_sys_stat_statfs2_fsize=no)])
5402   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5403   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5404     space=yes
5405         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5406   fi
5407 fi
5408
5409 if test $space = no; then
5410   # Ultrix
5411   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5412   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5413   [AC_TRY_RUN([#include <sys/types.h>
5414 #ifdef HAVE_SYS_PARAM_H
5415 #include <sys/param.h>
5416 #endif
5417 #ifdef HAVE_SYS_MOUNT_H
5418 #include <sys/mount.h>
5419 #endif
5420 #ifdef HAVE_SYS_FS_TYPES_H
5421 #include <sys/fs_types.h>
5422 #endif
5423   main ()
5424   {
5425   struct fs_data fsd;
5426   /* Ultrix's statfs returns 1 for success,
5427      0 for not mounted, -1 for failure.  */
5428   exit (statfs (".", &fsd) != 1);
5429   }],
5430   fu_cv_sys_stat_fs_data=yes,
5431   fu_cv_sys_stat_fs_data=no,
5432   fu_cv_sys_stat_fs_data=no)])
5433   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5434   if test $fu_cv_sys_stat_fs_data = yes; then
5435     space=yes
5436     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5437   fi
5438 fi
5439
5440 #
5441 # As a gating factor for large file support, in order to
5442 # use <4GB files we must have the following minimal support
5443 # available.
5444 # long long, and a 64 bit off_t or off64_t.
5445 # If we don't have all of these then disable large
5446 # file support.
5447 #
5448 AC_MSG_CHECKING([if large file support can be enabled])
5449 AC_TRY_COMPILE([
5450 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5451 #include <sys/types.h>
5452 #else
5453 __COMPILE_ERROR_
5454 #endif
5455 ],
5456 [int i],
5457 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5458 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5459         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5460 fi
5461 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5462
5463
5464 #################################################
5465 # check for cluster extensions
5466
5467 AC_MSG_CHECKING(cluster support)
5468 AC_ARG_WITH(cluster-support,
5469 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
5470
5471 if test x"$with_cluster_support" = x ; then
5472         with_cluster_support="auto"
5473 fi
5474
5475 AC_MSG_RESULT($with_cluster_support)
5476
5477 AC_ARG_WITH(ctdb,
5478 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
5479 [ case "$withval" in
5480   yes|no)
5481     AC_MSG_WARN([--with-ctdb called without argument])
5482     ;;
5483   *)
5484     CTDB_CPPFLAGS="-I$withval/include"
5485     ;;
5486   esac])
5487
5488 AC_ARG_ENABLE(old-ctdb,
5489         [AS_HELP_STRING([--enable-old-ctdb],
5490                 [Enable build against (too) old ctdb version (default=no)])],,
5491                 [enable_old_ctdb=no])
5492
5493
5494 if test "$with_cluster_support" != "no" ; then
5495
5496 AC_MSG_NOTICE(checking whether cluster support is available)
5497
5498 have_cluster_support="yes"
5499 ctdb_broken="no"
5500
5501 SAVED_CPPFLAGS="$CPPFLAGS"
5502 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS} $CTDB_CPPFLAGS"
5503
5504 AC_CHECK_HEADERS(ctdb.h ctdb_private.h,,,[
5505 #include "confdefs.h"
5506 #define NO_CONFIG_H
5507 #include "replace.h"
5508 #include "system/wait.h"
5509 #include "system/network.h"
5510 #define private #error __USED_RESERVED_WORD_private__
5511 #include <talloc.h>
5512 #include <tdb.h>
5513 #include <ctdb.h>
5514 ])
5515
5516 if test "x$have_cluster_support" = "xyes" -a \
5517         "x$ac_cv_header_ctdb_h" != "xyes"
5518 then
5519         have_cluster_support=no
5520         ctdb_broken="ctdb.h is required for cluster support"
5521 fi
5522
5523 if test "x$have_cluster_support" = "xyes" -a \
5524         "x$ac_cv_header_ctdb_h" != "xyes"
5525 then
5526         have_cluster_support=no
5527         ctdb_broken="ctdb_private.h is required for cluster support"
5528 fi
5529
5530
5531 if test "x$have_cluster_support" = "xyes" ; then
5532         AC_HAVE_DECL(CTDB_CONTROL_TRANS3_COMMIT,[
5533         #include "confdefs.h"
5534         #define NO_CONFIG_H
5535         #include "replace.h"
5536         #include "system/wait.h"
5537         #include "system/network.h"
5538         #include <talloc.h>
5539         #include <tdb.h>
5540         #include <ctdb.h>
5541         #include <ctdb_private.h>
5542         ])
5543         if test x"$ac_cv_have_CTDB_CONTROL_TRANS3_COMMIT_decl" != x"yes"; then
5544                 ctdb_broken="ctdb transaction support missing or too old"
5545                 have_cluster_support=no
5546         fi
5547 fi
5548
5549 if test "x$have_cluster_support" = "xyes" ; then
5550         AC_HAVE_DECL(CTDB_CONTROL_SCHEDULE_FOR_DELETION,[
5551         #include "confdefs.h"
5552         #define NO_CONFIG_H
5553         #include "replace.h"
5554         #include "system/wait.h"
5555         #include "system/network.h"
5556         #include <talloc.h>
5557         #include <tdb.h>
5558         #include <ctdb.h>
5559         #include <ctdb_private.h>
5560         ])
5561         if test x"$ac_cv_have_CTDB_CONTROL_SCHEDULE_FOR_DELETION_decl" != x"yes"
5562         then
5563                 if test "x$enable_old_ctdb" = "xyes" ; then
5564                         AC_MSG_WARN([ignoring missing SCHEDULE_FOR_DELETION (--enable-old-ctdb)])
5565                 else
5566                         ctdb_broken="support for SCHEDULE_FOR_DELETION control missing"
5567                         have_cluster_support=no
5568                 fi
5569         fi
5570 fi
5571
5572 if test "x$have_cluster_support" = "xyes" ; then
5573         # In ctdb 1.0.57, ctdb_control_tcp was temporarily renamed
5574         # to ctdb_tcp_client.
5575         AC_CHECK_TYPE(struct ctdb_tcp_client,[
5576                 AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
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 if test "x$have_cluster_support" = "xyes" ; then
5591         AC_CHECK_TYPE(struct ctdb_control_tcp,[
5592                 AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5593         ],[
5594                 ctdb_broken="missing struct ctdb_control_tcp"
5595                 have_cluster_support=no
5596         ],[
5597         #include "confdefs.h"
5598         #define NO_CONFIG_H
5599         #include "replace.h"
5600         #include "system/wait.h"
5601         #include "system/network.h"
5602         #include <talloc.h>
5603         #include <tdb.h>
5604         #include <ctdb.h>
5605         #include <ctdb_private.h>
5606         ])
5607 fi
5608
5609 # test for optional ipv6 support in ctdb:
5610 if test "x$have_cluster_support" = "xyes" ; then
5611         AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5612                 AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5613         ],,[
5614         #include "confdefs.h"
5615         #define NO_CONFIG_H
5616         #include "replace.h"
5617         #include "system/wait.h"
5618         #include "system/network.h"
5619         #include <talloc.h>
5620         #include <tdb.h>
5621         #include <ctdb.h>
5622         #include <ctdb_private.h>
5623         ])
5624 fi
5625
5626 CPPFLAGS="$SAVED_CPPFLAGS"
5627
5628 fi # (if test "$with_cluster_support" != "no")
5629
5630 if test x"$have_cluster_support" = "xno" ; then
5631         case "$with_cluster_support" in
5632         yes)
5633                 AC_MSG_ERROR(["cluster support not available: $ctdb_broken"])
5634                 ;;
5635         auto)
5636                 AC_MSG_WARN(["cluster support not available: $ctdb_broken"])
5637                 ;;
5638         esac
5639         with_cluster_support=no
5640 fi
5641
5642 if test "x$with_cluster_support" != "xno"; then
5643     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5644     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5645     AC_MSG_NOTICE(Building with cluster support)
5646 else
5647     AC_MSG_NOTICE(Building without cluster support)
5648 fi
5649
5650
5651 #################################################
5652 # check for rtnetlink
5653
5654 AC_CHECK_HEADERS([linux/netlink.h],
5655   AC_CHECK_HEADERS([linux/rtnetlink.h],[],[],
5656                    [#include <bits/sockaddr.h>
5657                     #include <linux/netlink.h>]),
5658   [],[#include <bits/sockaddr.h>])
5659
5660 #################################################
5661 # check for ACL support
5662
5663 AC_MSG_CHECKING(whether to support ACLs)
5664 AC_ARG_WITH(acl-support,
5665 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5666 [ case "$withval" in
5667         yes|no)
5668                 with_acl_support="$withval"
5669                 ;;
5670   esac ])
5671
5672 if test x"$with_acl_support" = x ; then
5673         with_acl_support="auto"
5674 fi
5675
5676 AC_MSG_RESULT($with_acl_support)
5677
5678 if test x"$with_acl_support" = x"no"; then
5679         AC_MSG_RESULT(Disabling ACL support)
5680         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5681 else
5682         AC_MSG_NOTICE(checking whether ACL support is available:)
5683         case "$host_os" in
5684         *sysv5*)
5685                 AC_MSG_NOTICE(Using UnixWare ACLs)
5686                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5687                 default_static_modules="$default_static_modules vfs_solarisacl"
5688                 ;;
5689         *solaris*)
5690                 AC_MSG_NOTICE(Using solaris ACLs)
5691                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5692                 ACL_LIBS="$ACL_LIBS -lsec"
5693                 default_static_modules="$default_static_modules vfs_solarisacl"
5694                 ;;
5695         *hpux*)
5696                 AC_MSG_NOTICE(Using HPUX ACLs)
5697                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5698                 default_static_modules="$default_static_modules vfs_hpuxacl"
5699                 ;;
5700         *irix*)
5701                 AC_MSG_NOTICE(Using IRIX ACLs)
5702                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5703                 default_static_modules="$default_static_modules vfs_irixacl"
5704                 ;;
5705         *aix*)
5706                 AC_MSG_NOTICE(Using AIX ACLs)
5707                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5708                 default_static_modules="$default_static_modules vfs_aixacl"
5709                 ;;
5710         *osf*)
5711                 AC_MSG_NOTICE(Using Tru64 ACLs)
5712                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5713                 ACL_LIBS="$ACL_LIBS -lpacl"
5714                 default_static_modules="$default_static_modules vfs_tru64acl"
5715                 ;;
5716         *darwin*)
5717                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5718                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5719                 ;;
5720         *)
5721                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5722                 case "$host_os" in
5723                 *linux*)
5724                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5725                         ;;
5726                 esac
5727                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
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_t acl;
5735                                 int entry_id;
5736                                 acl_entry_t *entry_p;
5737                                 return acl_get_entry(acl, entry_id, entry_p);
5738                         ],
5739                         [samba_cv_HAVE_POSIX_ACLS=yes],
5740                         [samba_cv_HAVE_POSIX_ACLS=no])
5741                         LIBS=$acl_LIBS
5742                 ])
5743                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5744                         AC_MSG_NOTICE(Using posix ACLs)
5745                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5746                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5747                                 acl_LIBS=$LIBS
5748                                 LIBS="$LIBS $ACL_LIBS"
5749                                 AC_TRY_LINK([
5750                                         #include <sys/types.h>
5751                                         #include <sys/acl.h>
5752                                 ],[
5753                                         acl_permset_t permset_d;
5754                                         acl_perm_t perm;
5755                                         return acl_get_perm_np(permset_d, perm);
5756                                 ],
5757                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5758                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5759                                 LIBS=$acl_LIBS
5760                         ])
5761                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5762                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5763                         fi
5764                         default_static_modules="$default_static_modules vfs_posixacl"
5765                 else
5766                         AC_MSG_NOTICE(ACL support is not avaliable)
5767                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5768                 fi
5769                 ;;
5770         esac
5771 fi # with_acl_support
5772
5773 #################################################
5774 # check if we have FreeBSD sunacl
5775 case "$host_os" in
5776 *freebsd*)
5777     AC_CHECK_HEADER(sunacl.h)
5778     if test x"$ac_cv_header_sunacl_h" = xyes ; then
5779        AC_DEFINE(HAVE_FREEBSD_SUNACL_H,1,[Whether we have FreeBSD sunacl around])
5780        ZFSACL_LIBS=-lsunacl
5781        AC_SUBST(ZFSACL_LIBS)
5782        default_shared_modules="$default_shared_modules vfs_zfsacl"
5783     fi
5784     ;;
5785 esac
5786
5787 #################################################
5788 # check for AIO support
5789
5790 AC_MSG_CHECKING(whether to support asynchronous io)
5791 AC_ARG_WITH(aio-support,
5792 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5793 [ case "$withval" in
5794   yes)
5795
5796         AC_MSG_RESULT(yes)
5797         case "$host_os" in
5798         *)
5799                 AIO_LIBS=$LIBS
5800                 no_rt_LIBS=$LIBS
5801                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5802                 LIBS=$no_rt_LIBS
5803                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5804                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5805                 aio_LIBS=$LIBS
5806                 LIBS=$AIO_LIBS
5807                 AC_TRY_LINK([#include <sys/types.h>
5808 #include <aio.h>],
5809 [ struct aiocb a; return aio_read(&a);],
5810 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5811                 LIBS=$aio_LIBS])
5812                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5813                 aio_LIBS=$LIBS
5814                 LIBS=$AIO_LIBS
5815                 AC_TRY_LINK([#include <sys/types.h>
5816 #include <aio.h>],
5817 [ struct aiocb64 a; return aio_read64(&a);],
5818 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5819                 LIBS=$aio_LIBS])
5820                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5821                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5822                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5823                         LIBS=$AIO_LIBS
5824                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5825                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5826                         LIBS=$AIO_LIBS
5827                 fi
5828
5829                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5830                         AC_MSG_CHECKING(for aio_read)
5831                         AC_LINK_IFELSE([#include <aio.h>
5832 int main() { struct aiocb a; return aio_read(&a); }],
5833 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5834 [AC_MSG_RESULT(no)])
5835
5836                         AC_MSG_CHECKING(for aio_write)
5837                         AC_LINK_IFELSE([#include <aio.h>
5838 int main() { struct aiocb a; return aio_write(&a); }],
5839 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5840 [AC_MSG_RESULT(no)])
5841
5842                         AC_MSG_CHECKING(for aio_fsync)
5843                         AC_LINK_IFELSE([#include <aio.h>
5844 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5845 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5846 [AC_MSG_RESULT(no)])
5847
5848                         AC_MSG_CHECKING(for aio_return)
5849                         AC_LINK_IFELSE([#include <aio.h>
5850 int main() { struct aiocb a; return aio_return(&a); }],
5851 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5852 [AC_MSG_RESULT(no)])
5853
5854                         AC_MSG_CHECKING(for aio_error)
5855                         AC_LINK_IFELSE([#include <aio.h>
5856 int main() { struct aiocb a; return aio_error(&a); }],
5857 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5858 [AC_MSG_RESULT(no)])
5859
5860                         AC_MSG_CHECKING(for aio_cancel)
5861                         AC_LINK_IFELSE([#include <aio.h>
5862 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5863 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5864 [AC_MSG_RESULT(no)])
5865
5866                         AC_MSG_CHECKING(for aio_suspend)
5867                         AC_LINK_IFELSE([#include <aio.h>
5868 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5869 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5870 [AC_MSG_RESULT(no)])
5871                 fi
5872
5873                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5874                         AC_MSG_CHECKING(for aio_read64)
5875                         AC_LINK_IFELSE([#include <aio.h>
5876 int main() { struct aiocb a; return aio_read64(&a); }],
5877 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5878 [AC_MSG_RESULT(no)])
5879
5880                         AC_MSG_CHECKING(for aio_write64)
5881                         AC_LINK_IFELSE([#include <aio.h>
5882 int main() { struct aiocb a; return aio_write64(&a); }],
5883 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5884 [AC_MSG_RESULT(no)])
5885
5886                         AC_MSG_CHECKING(for aio_fsync64)
5887                         AC_LINK_IFELSE([#include <aio.h>
5888 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5889 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5890 [AC_MSG_RESULT(no)])
5891
5892                         AC_MSG_CHECKING(for aio_return64)
5893                         AC_LINK_IFELSE([#include <aio.h>
5894 int main() { struct aiocb a; return aio_return64(&a); }],
5895 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5896 [AC_MSG_RESULT(no)])
5897
5898                         AC_MSG_CHECKING(for aio_error64)
5899                         AC_LINK_IFELSE([#include <aio.h>
5900 int main() { struct aiocb a; return aio_error64(&a); }],
5901 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5902 [AC_MSG_RESULT(no)])
5903
5904                         AC_MSG_CHECKING(for aio_cancel64)
5905                         AC_LINK_IFELSE([#include <aio.h>
5906 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5907 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5908 [AC_MSG_RESULT(no)])
5909
5910                         AC_MSG_CHECKING(for aio_suspend64)
5911                         AC_LINK_IFELSE([#include <aio.h>
5912 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5913 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5914 [AC_MSG_RESULT(no)])
5915                 fi
5916             ;;
5917         esac
5918         ;;
5919   *)
5920     AC_MSG_RESULT(no)
5921     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5922     ;;
5923   esac ],
5924   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5925   AC_MSG_RESULT(no)
5926 )
5927
5928 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5929         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5930                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5931                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5932         fi
5933 fi
5934
5935 #################################################
5936 # check for sendfile support
5937
5938 with_sendfile_support=yes
5939 AC_MSG_CHECKING(whether to check to support sendfile)
5940 AC_ARG_WITH(sendfile-support,
5941 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5942 [ case "$withval" in
5943   yes)
5944
5945         AC_MSG_RESULT(yes);
5946
5947         case "$host_os" in
5948         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5949                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5950                 AC_TRY_LINK([#include <sys/sendfile.h>],
5951 [\
5952 int tofd, fromfd;
5953 off64_t offset;
5954 size_t total;
5955 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5956 ],
5957 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5958
5959                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5960                 AC_TRY_LINK([#include <sys/sendfile.h>],
5961 [\
5962 int tofd, fromfd;
5963 off_t offset;
5964 size_t total;
5965 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5966 ],
5967 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5968
5969 # Try and cope with broken Linux sendfile....
5970                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5971                 AC_TRY_LINK([\
5972 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5973 #undef _FILE_OFFSET_BITS
5974 #endif
5975 #include <sys/sendfile.h>],
5976 [\
5977 int tofd, fromfd;
5978 off_t offset;
5979 size_t total;
5980 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5981 ],
5982 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5983
5984         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5985                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5986                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5987                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5988         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5989                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5990                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5991                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5992         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5993                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5994                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5995         else
5996                 AC_MSG_RESULT(no);
5997         fi
5998
5999         ;;
6000         *freebsd* | *dragonfly* )
6001                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
6002                 AC_TRY_LINK([\
6003 #include <sys/types.h>
6004 #include <unistd.h>
6005 #include <sys/socket.h>
6006 #include <sys/uio.h>],
6007 [\
6008         int fromfd, tofd, ret, total=0;
6009         off_t offset, nwritten;
6010         struct sf_hdtr hdr;
6011         struct iovec hdtrl;
6012         hdr.headers = &hdtrl;
6013         hdr.hdr_cnt = 1;
6014         hdr.trailers = NULL;
6015         hdr.trl_cnt = 0;
6016         hdtrl.iov_base = NULL;
6017         hdtrl.iov_len = 0;
6018         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
6019 ],
6020 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
6021
6022         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
6023                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
6024                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
6025                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
6026         else
6027                 AC_MSG_RESULT(no);
6028         fi
6029         ;;
6030
6031         *hpux*)
6032                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
6033                 AC_TRY_LINK([\
6034 #include <sys/socket.h>
6035 #include <sys/uio.h>],
6036 [\
6037         int fromfd, tofd;
6038         size_t total=0;
6039         struct iovec hdtrl[2];
6040         ssize_t nwritten;
6041         off64_t offset;
6042
6043         hdtrl[0].iov_base = 0;
6044         hdtrl[0].iov_len = 0;
6045
6046         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
6047 ],
6048 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
6049         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
6050                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
6051                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
6052                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
6053         else
6054                 AC_MSG_RESULT(no);
6055         fi
6056
6057                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
6058                 AC_TRY_LINK([\
6059 #include <sys/socket.h>
6060 #include <sys/uio.h>],
6061 [\
6062         int fromfd, tofd;
6063         size_t total=0;
6064         struct iovec hdtrl[2];
6065         ssize_t nwritten;
6066         off_t offset;
6067
6068         hdtrl[0].iov_base = 0;
6069         hdtrl[0].iov_len = 0;
6070
6071         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
6072 ],
6073 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
6074         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
6075                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
6076                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
6077                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
6078         else
6079                 AC_MSG_RESULT(no);
6080         fi
6081         ;;
6082
6083         *solaris*)
6084                 AC_CHECK_LIB(sendfile,sendfilev)
6085                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
6086                 AC_TRY_LINK([\
6087 #include <sys/sendfile.h>],
6088 [\
6089         int sfvcnt;
6090         size_t xferred;
6091         struct sendfilevec vec[2];
6092         ssize_t nwritten;
6093         int tofd;
6094
6095         sfvcnt = 2;
6096
6097         vec[0].sfv_fd = SFV_FD_SELF;
6098         vec[0].sfv_flag = 0;
6099         vec[0].sfv_off = 0;
6100         vec[0].sfv_len = 0;
6101
6102         vec[1].sfv_fd = 0;
6103         vec[1].sfv_flag = 0;
6104         vec[1].sfv_off = 0;
6105         vec[1].sfv_len = 0;
6106         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
6107 ],
6108 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
6109
6110         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
6111                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
6112                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
6113                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
6114         else
6115                 AC_MSG_RESULT(no);
6116         fi
6117
6118                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
6119                 AC_TRY_LINK([\
6120 #include <sys/sendfile.h>],
6121 [\
6122         int sfvcnt;
6123         size_t xferred;
6124         struct sendfilevec vec[2];
6125         ssize_t nwritten;
6126         int tofd;
6127
6128         sfvcnt = 2;
6129
6130         vec[0].sfv_fd = SFV_FD_SELF;
6131         vec[0].sfv_flag = 0;
6132         vec[0].sfv_off = 0;
6133         vec[0].sfv_len = 0;
6134
6135         vec[1].sfv_fd = 0;
6136         vec[1].sfv_flag = 0;
6137         vec[1].sfv_off = 0;
6138         vec[1].sfv_len = 0;
6139         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
6140 ],
6141 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
6142
6143         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
6144                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
6145                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
6146                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
6147         else
6148                 AC_MSG_RESULT(no);
6149         fi
6150         ;;
6151         *aix*)
6152                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
6153                 AC_TRY_LINK([\
6154 #include <sys/socket.h>],
6155 [\
6156         int fromfd, tofd;
6157         size_t total=0;
6158         struct sf_parms hdtrl;
6159         ssize_t nwritten;
6160         off64_t offset;
6161
6162         hdtrl.header_data = 0;
6163         hdtrl.header_length = 0;
6164         hdtrl.file_descriptor = fromfd;
6165         hdtrl.file_offset = 0;
6166         hdtrl.file_bytes = 0;
6167         hdtrl.trailer_data = 0;
6168         hdtrl.trailer_length = 0;
6169
6170         nwritten = send_file(&tofd, &hdtrl, 0);
6171 ],
6172 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
6173         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
6174                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
6175                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
6176                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
6177         else
6178                 AC_MSG_RESULT(no);
6179         fi
6180         ;;
6181         *)
6182         ;;
6183         esac
6184         ;;
6185   *)
6186     AC_MSG_RESULT(no)
6187     ;;
6188   esac ],
6189   AC_MSG_RESULT(yes)
6190 )
6191
6192 ############################################
6193 # See if we have the Linux readahead syscall.
6194
6195 AC_CACHE_CHECK([for Linux readahead],
6196                 samba_cv_HAVE_LINUX_READAHEAD,[
6197     AC_TRY_LINK([
6198 #if defined(HAVE_UNISTD_H)
6199 #include <unistd.h>
6200 #endif
6201 #include <fcntl.h>],
6202     [ssize_t err = readahead(0,0,0x80000);],
6203     samba_cv_HAVE_LINUX_READAHEAD=yes,
6204     samba_cv_HAVE_LINUX_READAHEAD=no)])
6205
6206 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
6207   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
6208              [Whether Linux readahead is available])
6209 fi
6210
6211 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
6212
6213 ############################################
6214 # See if we have the posix_fadvise syscall.
6215
6216 AC_CACHE_CHECK([for posix_fadvise],
6217                 samba_cv_HAVE_POSIX_FADVISE,[
6218     AC_TRY_LINK([
6219 #if defined(HAVE_UNISTD_H)
6220 #include <unistd.h>
6221 #endif
6222 #include <fcntl.h>],
6223     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
6224     samba_cv_HAVE_POSIX_FADVISE=yes,
6225     samba_cv_HAVE_POSIX_FADVISE=no)])
6226
6227 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
6228   AC_DEFINE(HAVE_POSIX_FADVISE,1,
6229              [Whether posix_fadvise is available])
6230 fi
6231
6232 ############################################
6233 # See if we have the Linux splice syscall.
6234
6235 case "$host_os" in
6236 *linux*)
6237 AC_CACHE_CHECK([for Linux splice],
6238                 samba_cv_HAVE_LINUX_SPLICE,[
6239     AC_TRY_LINK([
6240 #if defined(HAVE_UNISTD_H)
6241 #include <unistd.h>
6242 #endif
6243 #include <fcntl.h>],
6244     [long ret = splice(0,0,1,0,400,0);],
6245     samba_cv_HAVE_LINUX_SPLICE=yes,
6246     samba_cv_HAVE_LINUX_SPLICE=no)])
6247 ;;
6248 *)
6249 samba_cv_HAVE_LINUX_SPLICE=no
6250 ;;
6251 esac
6252
6253 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
6254   AC_DEFINE(HAVE_LINUX_SPLICE,1,
6255              [Whether Linux splice is available])
6256 fi
6257
6258 AC_HAVE_DECL(splice, [#include <fcntl.h>])
6259
6260 ############################################
6261 # See if we have the a broken readlink syscall.
6262
6263 AC_CACHE_CHECK([for a broken readlink syscall],samba_cv_HAVE_BROKEN_READLINK,[
6264 AC_TRY_RUN([#include "${srcdir-.}/../tests/readlink.c"],
6265         samba_cv_HAVE_BROKEN_READLINK=no,samba_cv_HAVE_BROKEN_READLINK=yes,samba_cv_HAVE_BROKEN_READLINK=cross)
6266 ])
6267 if test x"$samba_cv_HAVE_BROKEN_READLINK" = x"yes"; then
6268         AC_DEFINE(HAVE_BROKEN_READLINK,1,[Whether the readlink syscall is broken])
6269 fi
6270
6271 #################################################
6272 # Check whether winbind is supported on this platform.  If so we need to
6273 # build and install client programs, sbin programs and shared libraries
6274
6275 AC_MSG_CHECKING(whether to build winbind)
6276
6277 # Initially, the value of $host_os decides whether winbind is supported
6278
6279 HAVE_WINBIND=yes
6280 HAVE_WBCLIENT=no
6281
6282 # Define external wbclient library to link against.  This disables winbind.
6283 # We define this here so --with-winbind can override it.
6284 AC_ARG_WITH(wbclient,
6285 [AS_HELP_STRING([--with-wbclient], [Use external wbclient (optional)])],
6286 [
6287   case "$withval" in
6288         no)
6289                 HAVE_WBCLIENT=no
6290                 ;;
6291         yes)
6292                 HAVE_WBCLIENT=yes
6293                 HAVE_WINBIND=no
6294                 ;;
6295         *)
6296                 HAVE_WBCLIENT=yes
6297                 HAVE_WINBIND=no
6298                 WBCLIENT_INCLUDES="-I$withval/include"
6299                 WBCLIENT_LDFLAGS="-L$withval/lib"
6300                 ;;
6301   esac ],
6302 )
6303
6304 AC_SUBST(WBCLIENT_INCLUDES)
6305 AC_SUBST(WBCLIENT_LDFLAGS)
6306 AC_SUBST(WBCLIENT_LIBS)
6307
6308
6309 # Define the winbind shared library name and any specific linker flags
6310 # it needs to be built with.
6311
6312 WINBIND_NSS="../nsswitch/libnss_winbind.$SHLIBEXT"
6313 WINBIND_WINS_NSS="../nsswitch/libnss_wins.$SHLIBEXT"
6314 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
6315 NSSSONAMEVERSIONSUFFIX=""
6316
6317 case "$host_os" in
6318         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
6319                 NSSSONAMEVERSIONSUFFIX=".2"
6320                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_linux.o"
6321                 ;;
6322         *freebsd[[5-9]]*)
6323                 # FreeBSD winbind client is implemented as a wrapper around
6324                 # the Linux version.
6325                 NSSSONAMEVERSIONSUFFIX=".1"
6326                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_freebsd.o \
6327                     ../nsswitch/winbind_nss_linux.o"
6328                 WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
6329                 WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
6330                 ;;
6331
6332         *netbsd*[[3-9]]*)
6333                 # NetBSD winbind client is implemented as a wrapper
6334                 # around the Linux version. It needs getpwent_r() to
6335                 # indicate libc's use of the correct nsdispatch API.
6336                 #
6337                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
6338                         WINBIND_NSS_EXTRA_OBJS="\
6339                             ../nsswitch/winbind_nss_netbsd.o \
6340                             ../nsswitch/winbind_nss_linux.o"
6341                         WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
6342                         WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
6343                 else
6344                         HAVE_WINBIND=no
6345                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
6346                 fi
6347                 ;;
6348         *irix*)
6349                 # IRIX has differently named shared libraries
6350                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_irix.o"
6351                 WINBIND_NSS="../nsswitch/libns_winbind.$SHLIBEXT"
6352                 WINBIND_WINS_NSS="../nsswitch/libns_wins.$SHLIBEXT"
6353                 ;;
6354         *solaris*)
6355                 # Solaris winbind client is implemented as a wrapper around
6356                 # the Linux version.
6357                 NSSSONAMEVERSIONSUFFIX=".1"
6358                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o \
6359                     ../nsswitch/winbind_nss_linux.o"
6360                 ;;
6361         *hpux11*)
6362                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o"
6363                 ;;
6364         *aix*)
6365                 # AIX has even differently named shared libraries.  No
6366                 # WINS support has been implemented yet.
6367                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_aix.o"
6368                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
6369                 WINBIND_NSS="../nsswitch/WINBIND"
6370                 WINBIND_WINS_NSS=""
6371                 ;;
6372         *)
6373                 HAVE_WINBIND=no
6374                 winbind_no_reason=", unsupported on $host_os"
6375                 ;;
6376 esac
6377
6378 # Check the setting of --with-winbind
6379
6380 AC_ARG_WITH(winbind,
6381 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
6382 [
6383   case "$withval" in
6384         yes)
6385                 HAVE_WINBIND=yes
6386                 HAVE_WBCLIENT=no
6387                 ;;
6388         no)
6389                 HAVE_WINBIND=no
6390                 winbind_reason=""
6391                 ;;
6392   esac ],
6393 )
6394
6395 # We need unix domain sockets for winbind
6396
6397 if test x"$HAVE_WINBIND" = x"yes"; then
6398         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
6399                 winbind_no_reason=", no unix domain socket support on $host_os"
6400                 HAVE_WINBIND=no
6401         fi
6402 fi
6403
6404 # Display test results
6405
6406 if test x"$HAVE_WINBIND" = x"no"; then
6407         WINBIND_NSS=""
6408         WINBIND_WINS_NSS=""
6409 fi
6410 if test x"$HAVE_WBCLIENT" = x"yes"; then
6411         AC_CHECK_LIB(wbclient, wbcInterfaceDetails,
6412                      [LIBWBCLIENT_LIBS="-lwbclient"], AC_MSG_ERROR([Could not find wbclient]), [$WBCLIENT_LDFLAGS])
6413         LIBWBCLIENT_LIBS="$LIBWBCLIENT_LIBS $WBCLIENT_LDFLAGS"
6414         AC_MSG_RESULT(yes)
6415         AC_DEFINE(WITH_WINBIND,1,[Whether to link to wbclient])
6416         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6417 else
6418         if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
6419                 BUILD_LIBWBCLIENT_SHARED=no
6420         else
6421                 BUILD_LIBWBCLIENT_SHARED=yes
6422         fi
6423
6424         LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
6425         LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
6426         LIBWBCLIENT_SOVER=0
6427         LIBWBCLIENT_FULLVER=0
6428         if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
6429                 NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6430                 ## Only worry about libwbclient if we have shared
6431                 # library support
6432                 LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
6433                 LIBWBCLIENT=libwbclient
6434                 INSTALL_LIBWBCLIENT=installlibwbclient
6435                 UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
6436                 LIBWBCLIENT_LIBS="-lwbclient"
6437         else
6438                 LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
6439                 LIBWBCLIENT_LIBS=$LIBWBCLIENT_STATIC_TARGET
6440         fi
6441 fi
6442
6443 if test x"$HAVE_WINBIND" = x"yes"; then
6444         AC_MSG_RESULT(yes)
6445         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6446
6447         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6448         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6449         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6450                 PAM_MODULES="$PAM_MODULES pam_winbind"
6451                 INSTALL_PAM_MODULES="installpammodules"
6452                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6453         fi
6454
6455         # we use winbind, check for krb5 locate_plugin support:
6456         AC_CHECK_HEADERS([krb5/locate_plugin.h], [], [],
6457                 [[#ifdef HAVE_KRB5_H
6458                  #include <krb5.h>
6459                  #endif
6460         ]])
6461         if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
6462                 WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
6463                 if test x"$BLDSHARED" = x"true" ; then
6464                         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
6465                 fi
6466         fi
6467         # end of krb5 locate_plugin check
6468 else
6469         AC_MSG_RESULT(no$winbind_no_reason)
6470 fi
6471
6472 AC_SUBST(WINBIND_NSS)
6473 AC_SUBST(WINBIND_WINS_NSS)
6474 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
6475 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
6476 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
6477
6478 AC_SUBST(WINBIND_KRB5_LOCATOR)
6479
6480 # Solaris 10 does have new member in nss_XbyY_key
6481 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6482                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6483                 [#include <nss_dbdefs.h>])
6484
6485 # Solaris has some extra fields in struct passwd that need to be
6486 # initialised otherwise nscd crashes.
6487
6488 AC_CHECK_MEMBER(struct passwd.pw_comment,
6489                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6490                 [#include <pwd.h>])
6491
6492 AC_CHECK_MEMBER(struct passwd.pw_age,
6493                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6494                 [#include <pwd.h>])
6495
6496 # AIX 4.3.x and 5.1 do not have as many members in
6497 # struct secmethod_table as AIX 5.2
6498 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6499        [#include <usersec.h>])
6500 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6501        [#include <usersec.h>])
6502
6503 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6504 AC_TRY_COMPILE([#include <sys/types.h>
6505 #include <sys/socket.h>],
6506 [struct ucred cred;
6507  socklen_t cred_len;
6508  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6509 ],
6510 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6511 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6512     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6513 fi
6514
6515 AC_CACHE_CHECK([for getpeereid],samba_cv_HAVE_GETPEEREID,[
6516 AC_TRY_LINK([#include <sys/types.h>
6517 #include <unistd.h>],
6518 [uid_t uid; gid_t gid; int ret;
6519  ret = getpeereid(0, &uid, &gid);
6520 ],
6521 samba_cv_HAVE_GETPEEREID=yes,samba_cv_HAVE_GETPEEREID=no)])
6522 if test x"$samba_cv_HAVE_GETPEEREID" = xyes; then
6523    AC_DEFINE(HAVE_GETPEEREID,1,
6524              [Whether we have getpeereid to get socket credentials])
6525 fi
6526
6527
6528 #################################################
6529 # Check to see if we should use the included popt
6530
6531 AC_ARG_WITH(included-popt,
6532 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
6533 [
6534   case "$withval" in
6535         yes)
6536                 INCLUDED_POPT=yes
6537                 ;;
6538         no)
6539                 INCLUDED_POPT=no
6540                 ;;
6541   esac ],
6542 )
6543 if test x"$INCLUDED_POPT" != x"yes"; then
6544     AC_CHECK_LIB(popt, poptGetContext,
6545                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6546 fi
6547
6548 AC_MSG_CHECKING(whether to use included popt)
6549 if test x"$INCLUDED_POPT" = x"yes"; then
6550     AC_MSG_RESULT(yes)
6551     BUILD_POPT='$(POPT_OBJ)'
6552     POPTLIBS='$(POPT_OBJ)'
6553     FLAGS1="-I\$(srcdir)/../lib/popt"
6554 else
6555     AC_MSG_RESULT(no)
6556         BUILD_POPT=""
6557     POPTLIBS="-lpopt"
6558 fi
6559 AC_SUBST(BUILD_POPT)
6560 AC_SUBST(POPTLIBS)
6561 AC_SUBST(FLAGS1)
6562
6563 #################################################
6564 # Check if user wants DNS service discovery support
6565
6566 AC_ARG_ENABLE(dnssd,
6567 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=no)])])
6568
6569 AC_SUBST(DNSSD_LIBS)
6570 if test x"$enable_dnssd" = x"yes"; then
6571     have_dnssd_support=yes
6572
6573     AC_CHECK_HEADERS(dns_sd.h)
6574     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6575         have_dnssd_support=no
6576     fi
6577
6578     # On Darwin the DNSSD API is in libc, but on other platforms it's
6579     # probably in -ldns_sd
6580     AC_CHECK_FUNCS(DNSServiceRegister)
6581     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6582     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6583             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6584         have_dnssd_support=no
6585     fi
6586
6587     if test x"$have_dnssd_support" = x"yes"; then
6588         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6589                 [Whether to enable DNS service discovery support])
6590     else
6591         if test x"$enable_dnssd" = x"yes"; then
6592             AC_MSG_ERROR(DNS service discovery support not available)
6593         fi
6594     fi
6595
6596 fi
6597
6598 #################################################
6599 # Check if user wants avahi support
6600
6601 AC_ARG_ENABLE(avahi,
6602 [AS_HELP_STRING([--enable-avahi], [Enable Avahi support (default=auto)])])
6603
6604 if test x"$enable_avahi" != x"no"; then
6605     have_avahi_support=yes
6606
6607     AC_CHECK_HEADERS(avahi-common/watch.h)
6608     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6609         have_avahi_support=no
6610     fi
6611
6612     AC_CHECK_HEADERS(avahi-client/client.h)
6613     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6614         have_avahi_support=no
6615     fi
6616
6617     save_LIBS="$LIBS"
6618     AC_CHECK_LIB(avahi-client, avahi_client_new,[have_avahi_client_new=yes])
6619     AC_CHECK_LIB(avahi-common, avahi_strerror,[have_avahi_strerror=yes])
6620     LIBS="$save_LIBS"
6621
6622     if test x"$have_avahi_client_new" != x"yes" -o \
6623        x"$have_avahi_strerror" != x"yes" ; then
6624         have_avahi_support=no
6625     fi
6626
6627     if test x"$have_avahi_support" = x"yes"; then
6628         AC_SUBST(AVAHI_LIBS, "-lavahi-client -lavahi-common")
6629         AC_DEFINE(WITH_AVAHI_SUPPORT, 1,
6630                 [Whether to enable avahi support])
6631         AC_SUBST(AVAHI_OBJ, "lib/avahi.o smbd/avahi_register.o")
6632     else
6633         if test x"$enable_avahi" = x"yes"; then
6634             AC_MSG_ERROR(avahi support not available)
6635         fi
6636     fi
6637 fi
6638
6639
6640 #################################################
6641 # Set pthread stuff
6642
6643 PTHREAD_CFLAGS=error
6644 PTHREAD_LDFLAGS=error
6645
6646 # If it's error, then the user didn't 
6647 # define it.
6648 if test "x$PTHREAD_LDFLAGS" = xerror; then
6649   AC_CHECK_LIB(pthread, pthread_attr_init, [
6650              PTHREAD_CFLAGS="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
6651              PTHREAD_LDFLAGS="-lpthread" ])
6652 fi
6653
6654 if test "x$PTHREAD_LDFLAGS" = xerror; then
6655   AC_CHECK_LIB(pthreads, pthread_attr_init, [
6656              PTHREAD_CFLAGS="-D_THREAD_SAFE"
6657              PTHREAD_LDFLAGS="-lpthreads" ])
6658 fi
6659
6660 if test "x$PTHREAD_LDFLAGS" = xerror; then
6661    AC_CHECK_LIB(c_r, pthread_attr_init, [
6662                 PTHREAD_CFLAGS="-D_THREAD_SAFE -pthread"
6663                 PTHREAD_LDFLAGS="-pthread" ])
6664 fi
6665
6666 if test "x$PTHREAD_LDFLAGS" = xerror; then
6667    AC_CHECK_FUNC(pthread_attr_init, [
6668                  PTHREAD_CFLAGS="-D_REENTRANT"
6669                  PTHREAD_LDFLAGS="-lpthread" ])
6670 fi
6671
6672 # especially for HP-UX, where the AC_CHECK_FUNC macro fails to test for
6673 # pthread_attr_init. On pthread_mutex_lock it works there...
6674 if test "x$PTHREAD_LDFLAGS" = xerror; then
6675    AC_CHECK_LIB(pthread, pthread_mutex_lock, [
6676                 PTHREAD_CFLAGS="-D_REENTRANT"
6677                 PTHREAD_LDFLAGS="-lpthread" ])
6678 fi
6679
6680 AC_SUBST(PTHREAD_CFLAGS)
6681 AC_SUBST(PTHREAD_LDFLAGS)
6682
6683 samba_cv_HAVE_PTHREAD=no
6684 if test x"$PTHREAD_CFLAGS" != xerror -a x"$PTHREAD_LDFLAGS" != xerror; then
6685         samba_cv_HAVE_PTHREAD=yes
6686         # now check for pthread.h with pthread-correct CFLAGS and LDFLAGS:
6687         ac_save_CFLAGS=$CFLAGS
6688         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6689         ac_save_LDFLAGS=$LDFLAGS
6690         LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
6691         AC_CHECK_HEADERS(pthread.h)
6692         CFLAGS=$ac_save_CFLAGS
6693         LDFLAGS=$ac_save_LDFLAGS
6694         AC_DEFINE(HAVE_PTHREAD, 1, [Do we have pthreads around?])
6695 fi
6696
6697 #################################################
6698 # Check if user wants pthreadpool support
6699
6700 AC_ARG_ENABLE(pthreadpool,
6701 [AS_HELP_STRING([--enable-pthreadpool], [Enable pthreads pool helper support (default=no)])])
6702
6703 if test x"$enable_pthreadpool" = xyes -a x"$samba_cv_HAVE_PTHREAD" != x"yes"; then
6704         AC_MSG_ERROR([pthreadpool support cannot be enabled when pthread support was not found])
6705 fi
6706
6707 if test x"$enable_pthreadpool" = x"yes" -a x"$samba_cv_HAVE_PTHREAD" = x"yes"; then
6708     LIBS="$LIBS $PTHREAD_LDFLAGS"
6709     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6710     AC_DEFINE(WITH_PTHREADPOOL, 1, [Whether to include pthreadpool helpers])
6711     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool/pthreadpool.o")
6712     PTHREADPOOLTEST="bin/pthreadpooltest\$(EXEEXT)"
6713     AC_SUBST(PTHREADPOOLTEST)
6714 fi
6715
6716 #################################################
6717 # Check to see if we should use the included iniparser
6718
6719 AC_ARG_WITH(included-iniparser,
6720 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6721 [
6722   case "$withval" in
6723         yes)
6724                 INCLUDED_INIPARSER=yes
6725                 ;;
6726         no)
6727                 INCLUDED_INIPARSER=no
6728                 ;;
6729   esac ],
6730 )
6731 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6732     AC_CHECK_LIB(iniparser, iniparser_load,
6733                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6734 fi
6735
6736 AC_MSG_CHECKING(whether to use included iniparser)
6737 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6738     AC_MSG_RESULT(yes)
6739     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6740         INIPARSERLIBS=""
6741     FLAGS1="$FLAGS1 -I\$(srcdir)/../lib/iniparser/src"
6742 else
6743     AC_MSG_RESULT(no)
6744         BUILD_INIPARSER=""
6745     INIPARSERLIBS="-liniparser"
6746 fi
6747 AC_SUBST(BUILD_INIPARSER)
6748 AC_SUBST(INIPARSERLIBS)
6749 AC_SUBST(FLAGS1)
6750
6751 ###################################################
6752 # Check for different/missing (set|get|end)netgrent prototypes
6753 CFLAGS_SAVE=$CFLAGS
6754 if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
6755         CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6756 fi
6757 AC_CACHE_CHECK([for setnetgrent prototype],samba_cv_setnetgrent_prototype, [
6758     AC_TRY_COMPILE([#include<netdb.h>
6759                     #ifdef HAVE_NETGROUP_H
6760                     #include<netgroup.h>
6761                     #endif],[setnetgrent("foo")],
6762                     samba_cv_setnetgrent_prototype=yes, samba_cv_setnetgrent_prototype=no)])
6763 if test x"$samba_cv_setnetgrent_prototype" = x"yes"; then
6764     AC_DEFINE(HAVE_SETNETGRENT_PROTOTYPE, 1, [If setnetgrent prototype is defined])
6765 fi
6766 AC_CACHE_CHECK([for getnetgrent prototype],samba_cv_getnetgrent_prototype, [
6767     AC_TRY_COMPILE([#include<netdb.h>
6768                     #ifdef HAVE_NETGROUP_H
6769                     #include<netgroup.h>
6770                     #endif],[char *dom, *user,*host; getnetgrent(&dom,&user,&host)],
6771                     samba_cv_getnetgrent_prototype=yes, samba_cv_getnetgrent_prototype=no)])
6772 if test x"$samba_cv_getnetgrent_prototype" = x"yes"; then
6773     AC_DEFINE(HAVE_GETNETGRENT_PROTOTYPE, 1, [If getnetgrent prototype is defined])
6774 fi
6775 AC_CACHE_CHECK([for endnetgrent prototype],samba_cv_endnetgrent_prototype, [
6776     AC_TRY_COMPILE([#include<netdb.h>
6777                     #ifdef HAVE_NETGROUP_H
6778                     #include<netgroup.h>
6779                     #endif],[endnetgrent()],
6780                     samba_cv_endnetgrent_prototype=yes, samba_cv_endnetgrent_prototype=no)])
6781 if test x"$samba_cv_endnetgrent_prototype" = x"yes"; then
6782     AC_DEFINE(HAVE_ENDNETGRENT_PROTOTYPE, 1, [If endnetgrent prototype is defined])
6783 fi
6784
6785 CFLAGS=$CFLAGS_SAVE
6786
6787 # Checks for the vfs_fileid module
6788 # Start
6789 AC_CHECK_FUNC(getmntent)
6790
6791 AC_CHECK_HEADERS(sys/statfs.h)
6792
6793 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
6794 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6795              AC_TRY_RUN([
6796                 #include <sys/types.h>
6797                 #include <sys/statfs.h>
6798                 int main(void)
6799                 {
6800                         struct statfs fsd;
6801                         fsid_t fsid = fsd.f_fsid;
6802                         return statfs (".", &fsd);
6803                 }],
6804                 vfsfileid_cv_statfs=yes,
6805                 vfsfileid_cv_statfs=no,
6806                 vfsfileid_cv_statfs=cross)
6807 ])
6808 AC_MSG_RESULT($vfsfileid_cv_statfs)
6809
6810 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6811         x"$vfsfileid_cv_statfs" = x"yes"; then
6812         default_shared_modules="$default_shared_modules vfs_fileid"
6813 fi
6814 # End
6815 # Checks for the vfs_fileid module
6816
6817
6818 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6819 do
6820         eval MODULE_DEFAULT_$i=STATIC
6821 done
6822
6823 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6824 do
6825         dnl Fall back to static if we cannot build shared libraries
6826         eval MODULE_DEFAULT_$i=STATIC
6827
6828         if test $BLDSHARED = true; then
6829                 eval MODULE_DEFAULT_$i=SHARED
6830         fi
6831 done
6832
6833 dnl Always build these modules static
6834 MODULE_rpc_spoolss=STATIC
6835 MODULE_rpc_srvsvc=STATIC
6836 MODULE_idmap_tdb=STATIC
6837 MODULE_idmap_passdb=STATIC
6838 MODULE_idmap_nss=STATIC
6839
6840 MODULE_nss_info_template=STATIC
6841
6842 AC_ARG_WITH(static-modules,
6843 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6844 [ if test $withval; then
6845         for i in `echo $withval | sed -e 's/,/ /g'`
6846         do
6847                 eval MODULE_$i=STATIC
6848         done
6849 fi ])
6850
6851 AC_ARG_WITH(shared-modules,
6852 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6853 [ if test $withval; then
6854         for i in `echo $withval | sed -e 's/,/ /g'`
6855         do
6856                         eval MODULE_$i=SHARED
6857         done
6858 fi ])
6859
6860 if test x"$MODULE_DEFAULT_vfs_notify_fam" = xSTATIC -o \
6861                 x"$MODULE_vfs_notify_fam" = xSTATIC ; then
6862         SMBD_FAM_LIBS="$SMB_FAM_LIBS"
6863         AC_SUBST(SMBD_FAM_LIBS)
6864 fi
6865
6866 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o passdb/pdb_ipa.o,
6867                    "bin/ldapsam.$SHLIBEXT", PDB,
6868                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6869 SMB_MODULE(pdb_ads, passdb/pdb_ads.o \$(TLDAP_OBJ), "bin/ads.$SHLIBEXT", PDB)
6870 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6871 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6872 SMB_MODULE(pdb_wbc_sam, passdb/pdb_wbc_sam.o, "bin/wbc_sam.$SHLIBEXT", PDB)
6873 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6874
6875 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6876 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6877 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6878 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6879 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6880 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6881 SMB_MODULE(idmap_autorid, winbindd/idmap_autorid.o, "bin/autorid.$SHLIBEXT", IDMAP)
6882 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6883 SMB_MODULE(idmap_hash, \$(IDMAP_HASH_OBJ), "bin/hash.$SHLIBEXT", IDMAP)
6884 SMB_MODULE(idmap_adex, \$(IDMAP_ADEX_OBJ), "bin/adex.$SHLIBEXT", IDMAP)
6885 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6886
6887 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6888 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6889
6890 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6891 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6892 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6893 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6894 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6895
6896 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6897 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6898 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6899 SMB_MODULE(auth_wbc, \$(AUTH_WBC_OBJ), "bin/wbc.$SHLIBEXT", AUTH)
6900 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6901 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6902 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6903 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6904 SMB_MODULE(auth_netlogond, \$(AUTH_NETLOGOND_OBJ), "bin/netlogond.$SHLIBEXT", AUTH)
6905 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6906
6907 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6908 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6909 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6910 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6911 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6912 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6913 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6914 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6915 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6916 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6917 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6918 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6919 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6920 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6921 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6922 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6923 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6924 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6925 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6926 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6927 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6928 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6929 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6930 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6931 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6932 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6933 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6934 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6935 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6936 SMB_MODULE(vfs_gpfs_hsm_notify, \$(VFS_GPFS_PREFETCH_OBJ), "bin/gpfs_hsm_notify.$SHLIBEXT", VFS)
6937 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6938 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6939 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6940 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6941 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6942 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6943 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6944 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6945 SMB_MODULE(vfs_acl_xattr, \$(VFS_ACL_XATTR_OBJ), "bin/acl_xattr.$SHLIBEXT", VFS)
6946 SMB_MODULE(vfs_acl_tdb, \$(VFS_ACL_TDB_OBJ), "bin/acl_tdb.$SHLIBEXT", VFS)
6947 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6948 SMB_MODULE(vfs_onefs, \$(VFS_ONEFS), "bin/onefs.$SHLIBEXT", VFS)
6949 SMB_MODULE(vfs_onefs_shadow_copy, \$(VFS_ONEFS_SHADOW_COPY), "bin/onefs_shadow_copy.$SHLIBEXT", VFS)
6950 SMB_MODULE(vfs_dirsort, \$(VFS_DIRSORT_OBJ), "bin/dirsort.$SHLIBEXT", VFS)
6951 SMB_MODULE(vfs_scannedonly, \$(VFS_SCANNEDONLY_OBJ), "bin/scannedonly.$SHLIBEXT", VFS)
6952 SMB_MODULE(vfs_crossrename, \$(VFS_CROSSRENAME_OBJ), "bin/crossrename.$SHLIBEXT", VFS)
6953 SMB_MODULE(vfs_linux_xfs_sgid, \$(VFS_LINUX_XFS_SGID_OBJ), "bin/linux_xfs_sgid.$SHLIBEXT", VFS)
6954 SMB_MODULE(vfs_time_audit, \$(VFS_TIME_AUDIT_OBJ), "bin/time_audit.$SHLIBEXT", VFS)
6955
6956 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6957
6958 SMB_MODULE(perfcount_onefs, \$(PERFCOUNT_ONEFS), "bin/pc_onefs.$SHLIBEXT", PERFCOUNT)
6959 SMB_MODULE(perfcount_test, \$(PERFCOUNT_TEST), "bin/pc_test.$SHLIBEXT", PERFCOUNT)
6960 SMB_SUBSYSTEM(PERFCOUNT,smbd/perfcount.o)
6961
6962 SMB_MODULE(gpext_registry, libgpo/gpext/registry.o, "bin/registry.$SHLIBEXT", GPEXT)
6963 SMB_MODULE(gpext_scripts, libgpo/gpext/scripts.o, "bin/scripts.$SHLIBEXT", GPEXT)
6964 SMB_MODULE(gpext_security, libgpo/gpext/security.o, "bin/security.$SHLIBEXT", GPEXT)
6965 SMB_SUBSYSTEM(GPEXT, libgpo/gpext/gpext.o)
6966
6967 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6968
6969 #################################################
6970 # do extra things if we are running insure
6971
6972 if test "${ac_cv_prog_CC}" = "insure"; then
6973         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6974 fi
6975
6976 #################################################
6977 # If run from the build farm, enable NASTY hacks
6978 #################################################
6979 AC_MSG_CHECKING(whether to enable build farm hacks)
6980 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6981         AC_MSG_RESULT(yes)
6982         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6983 else
6984         AC_MSG_RESULT(no)
6985 fi
6986
6987 #################################################
6988 # check for bad librt/libpthread interactions
6989
6990 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6991     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6992     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6993     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6994
6995 SMB_IF_RTSIGNAL_BUG(
6996         [
6997             # Have RT_SIGNAL bug, need to check whether the problem will
6998             # affect anything we have configured.
6999
7000             rt_do_error=no
7001             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
7002                 if test x"$rt_signal_lease_ok" = x"no" ; then
7003                     rt_do_error=yes
7004                 fi
7005             fi
7006
7007             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
7008                 if test x"$rt_signal_notify_ok" = x"no" ; then
7009                     rt_do_error=yes
7010                 fi
7011             fi
7012
7013             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
7014                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
7015                 if test x"$rt_signal_aio_ok" = x"no" ; then
7016                     rt_do_error=yes
7017                 fi
7018             fi
7019
7020             if test x"$rt_do_error" = x"yes" ; then
7021                 SMB_IS_LIBPTHREAD_LINKED(
7022                     [
7023                         cat<<MSG
7024
7025 *** On this platforms, linking Samba against pthreads causes problems
7026 *** with the oplock and change notification mechanisms. You may be
7027 *** using pthreads as a side-effect of using the --with-aio-support
7028 *** or --with-profiling-data options. Please remove these and try again.
7029
7030 MSG
7031                     ],
7032                     [
7033                         cat<<MSG
7034
7035 *** On this platform, the oplock and change notification mechanisms do not
7036 *** appear to work. Please report this problem to samba-technical@samba.org
7037 *** and attach the config.log file from this directory.
7038
7039 MSG
7040                     ])
7041                 AC_MSG_ERROR(unable to use realtime signals on this platform)
7042             fi
7043         ],
7044         [
7045             # no RT_SIGNAL bug, we are golden
7046             SMB_IS_LIBPTHREAD_LINKED(
7047                 [
7048                     AC_MSG_WARN(using libpthreads - this may degrade performance)
7049                 ])
7050
7051         ],
7052         [
7053             # cross compiling, I hope you know what you are doing
7054             true
7055         ])
7056
7057 fi
7058
7059 m4_include(../lib/zlib/zlib.m4)
7060
7061 if test x$smbtorture4_possible = xyes; then
7062         saved_USESHARED="$USESHARED"
7063         USESHARED="false"
7064         smbtorture4_path="bin/smbtorture4"
7065         smbtorture4_option="-t bin/smbtorture4"
7066         AC_SUBST(smbtorture4_path)
7067         AC_SUBST(smbtorture4_option)
7068         USESHARED="$saved_USESHARED"
7069         SMBTORTURE4="bin/smbtorture4"
7070         AC_SUBST(SMBTORTURE4)
7071 fi
7072
7073 AC_SUBST(ZLIB_LIBS)
7074 AC_SUBST(ZLIB_OBJS)
7075 AC_ZLIB([ZLIB_OBJS=""], [
7076         ZLIB_LIBS=""
7077         for o in adler32.o compress.o crc32.o gzio.o uncompr.o \
7078                      deflate.o trees.o zutil.o inflate.o infback.o \
7079                          inftrees.o inffast.o
7080         do
7081                 ZLIB_OBJS="$ZLIB_OBJS ../lib/zlib/$o"
7082         done
7083         CFLAGS="-I../lib/zlib $CFLAGS"
7084 ])
7085
7086 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
7087
7088 if test "x$enable_dmalloc" = xyes
7089 then
7090         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
7091         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
7092                   [Define to check invariants around some common functions])
7093         LIBS="$LIBS -ldmalloc"
7094 fi
7095
7096 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
7097 LIB_REMOVE_USR_LIB(LDFLAGS)
7098 LIB_REMOVE_USR_LIB(LIBS)
7099
7100 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
7101 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
7102 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
7103
7104 #################################################
7105 # Display summary of libraries detected
7106
7107 AC_MSG_RESULT([Using libraries:])
7108 AC_MSG_RESULT([    LIBS = $LIBS])
7109 if test x"$with_ads_support" != x"no"; then
7110     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
7111 fi
7112 if test x"$with_ldap_support" != x"no"; then
7113     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
7114 fi
7115 if test x"$with_dnsupdate_support" != x"no"; then
7116     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
7117 fi
7118 if test x"$have_dnssd_support" != x"no"; then
7119     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
7120 fi
7121 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
7122
7123 #################################################
7124 # final configure stuff
7125
7126 AC_MSG_CHECKING([configure summary])
7127 AC_TRY_RUN([#include "${srcdir-.}/../tests/summary.c"],
7128            AC_MSG_RESULT(yes),
7129            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
7130            AC_MSG_WARN([cannot run when cross-compiling]))
7131
7132 dnl Merge in developer cflags from now on
7133 AC_SUBST(DEVELOPER_CFLAGS)
7134 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes" -o x"$picky_developer" = x"yes"; then
7135     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
7136 fi
7137
7138 # Stuff the smbd-only libraries at the end of the smbd link
7139 # path (if we have them).
7140 SMBD_LIBS="$samba_dmapi_libs"
7141 AC_SUBST(SMBD_LIBS)
7142
7143 CFLAGS="${CFLAGS} \$(FLAGS)"
7144 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
7145
7146 # If we had to expand the includes, make tsure the output file is moved back
7147 AC_OUTPUT_COMMANDS([
7148 if test -f Makefile-noincludes -a ! -f Makefile -a ! -h Makefile ; then
7149         ln -s Makefile-noincludes Makefile
7150 fi
7151 ])
7152
7153 AC_OUTPUT(Makefile
7154           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
7155           lib/netapi/examples/Makefile
7156           lib/netapi/tests/Makefile
7157           pkgconfig/smbclient.pc
7158           pkgconfig/wbclient.pc
7159           pkgconfig/netapi.pc
7160           pkgconfig/smbsharemodes.pc
7161           ../examples/libsmbclient/Makefile.internal
7162           )
7163
7164 #################################################
7165 # Print very concise instructions on building/use
7166 if test "x$enable_dmalloc" = xyes
7167 then
7168         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
7169         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
7170 fi