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