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