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