Fix bug 7626 - Typo in configure samba_cv__CC_NEGATIVE_ENUM_VALUES two underscores.
[nivanova/samba.git] / source3 / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.54 or above
4 AC_PREREQ(2.54)
5
6 AC_INIT([Samba],[3],[samba-technical@samba.org])
7
8 AC_CONFIG_SRCDIR([include/includes.h])
9 AC_CONFIG_HEADER(include/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 fi # try_pam != no
4590
4591 #################################################
4592 # check for PAM_RADIO_TYPE
4593 AC_TRY_COMPILE([
4594 #if (!defined(LINUX))
4595
4596 #define PAM_EXTERN extern
4597 #if defined(HAVE_SECURITY_PAM_APPL_H)
4598 #include <security/pam_appl.h>
4599 #elif defined(HAVE_PAM_PAM_APPL_H)
4600 #include <pam/pam_appl.h>
4601 #endif
4602
4603 #endif
4604
4605 #if defined(HAVE_SECURITY_PAM_MODULES_H)
4606 #include <security/pam_modules.h>
4607 #elif defined(HAVE_PAM_PAM_MODULES_H)
4608 #include <pam/pam_modules.h>
4609 #endif
4610
4611 #if defined(HAVE_SECURITY__PAM_MACROS_H)
4612 #include <security/_pam_macros.h>
4613 #elif defined(HAVE_PAM__PAM_MACROS_H)
4614 #include <pam/_pam_macros.h>
4615 #endif
4616
4617 #ifdef HAVE_SECURITY_PAM_EXT_H
4618 #include <security/pam_ext.h>
4619 #endif
4620 ],
4621 [int i; i = PAM_RADIO_TYPE; ],
4622 AC_DEFINE(HAVE_PAM_RADIO_TYPE, 1, [Define to 1 if PAM_RADIO_TYPE is available]),[])
4623
4624 #################################################
4625 # check for pam_smbpass support
4626 PAM_MODULES=""
4627 INSTALL_PAM_MODULES=""
4628 UNINSTALL_PAM_MODULES=""
4629
4630 try_pam_smbpass=auto
4631 AC_MSG_CHECKING(whether to use pam_smbpass)
4632 AC_ARG_WITH(pam_smbpass,
4633 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=auto)])],
4634 [ case "$withval" in
4635   yes|no|auto)
4636     try_pam_smbpass=$withval
4637   ;;
4638   *)
4639     AC_MSG_ERROR([valid options are yes,no,auto])
4640   ;;
4641   esac
4642 ])
4643
4644 if test x"${try_pam_smbpass}" = xno ; then
4645         use_pam_smbpass=no
4646 else
4647         use_pam_smbpass=yes
4648         # Conditions under which pam_smbpass can't be built.
4649         if test x"$BLDSHARED" != xtrue ; then
4650                 if test x"${try_pam_smbpass}" = xyes ; then
4651                         AC_MSG_ERROR([No support for shared modules])
4652                 fi
4653                 use_pam_smbpass=no
4654         elif test x"$create_pam_modules" != xyes ; then
4655                 if test x"${try_pam_smbpass}" = xyes ; then
4656                         AC_MSG_ERROR([No support for PAM MODULES])
4657                 fi
4658                 use_pam_smbpass=no
4659         fi
4660
4661         if test x"${use_pam_smbpass}" = xyes ; then 
4662                 PAM_MODULES="pam_smbpass"
4663                 INSTALL_PAM_MODULES="installpammodules"
4664                 UNINSTALL_PAM_MODULES="uninstallpammodules"
4665         fi
4666 fi
4667 AC_MSG_RESULT([$use_pam_smbpass])
4668
4669
4670 ##
4671 ## moved after the check for -lcrypt in order to
4672 ## ensure that the necessary libraries are included
4673 ## check checking for truncated salt.  Wrapped by the
4674 ## $with_pam_for_crypt variable as above   --jerry
4675 ##
4676 if test $with_pam_for_crypt = no; then
4677 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4678 crypt_LIBS="$LIBS"
4679 LIBS="$AUTH_LIBS $LIBS"
4680 AC_TRY_RUN([#include "${srcdir-.}/../tests/crypttest.c"],
4681         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4682 LIBS="$crypt_LIBS"])
4683 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4684         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4685 fi
4686 fi
4687
4688 #################################################
4689 # check for a NISPLUS_HOME support
4690 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4691 AC_ARG_WITH(nisplus-home,
4692 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4693 [ case "$withval" in
4694   yes)
4695     AC_MSG_RESULT(yes)
4696     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4697     ;;
4698   *)
4699     AC_MSG_RESULT(no)
4700     ;;
4701   esac ],
4702   AC_MSG_RESULT(no)
4703 )
4704
4705 #################################################
4706 # check for syslog logging
4707 AC_MSG_CHECKING(whether to use syslog logging)
4708 AC_ARG_WITH(syslog,
4709 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4710 [ case "$withval" in
4711   yes)
4712     AC_MSG_RESULT(yes)
4713     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4714     ;;
4715   *)
4716     AC_MSG_RESULT(no)
4717     ;;
4718   esac ],
4719   AC_MSG_RESULT(no)
4720 )
4721
4722 #################################################
4723 # check for custom syslog facility
4724 AC_MSG_CHECKING(whether to use a custom syslog facility)
4725 AC_ARG_WITH(syslog-facility,
4726 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4727 [
4728   if test "$withval" = "no" ; then
4729     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4730   else
4731      if test "$withval" != "yes" ; then
4732         syslog_facility="$withval"
4733         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4734      fi
4735   fi
4736 ])
4737
4738 #################################################
4739 # check for experimental disk-quotas support
4740
4741 samba_cv_WITH_QUOTAS=auto
4742 samba_cv_TRY_QUOTAS=no
4743 samba_cv_RUN_QUOTA_TESTS=auto
4744 samba_cv_WITH_SYS_QUOTAS=auto
4745 samba_cv_TRY_SYS_QUOTAS=auto
4746 samba_cv_SYSQUOTA_FOUND=no
4747
4748 AC_MSG_CHECKING(whether to try disk-quotas support)
4749 AC_ARG_WITH(quotas,
4750 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4751 [ case "$withval" in
4752   yes)
4753     AC_MSG_RESULT(yes)
4754     samba_cv_WITH_QUOTAS=yes
4755     samba_cv_TRY_QUOTAS=yes
4756     samba_cv_RUN_QUOTA_TESTS=yes
4757     #set sys quotas to auto in this case
4758     samba_cv_TRY_SYS_QUOTAS=auto
4759     ;;
4760   auto)
4761     AC_MSG_RESULT(auto)
4762     samba_cv_WITH_QUOTAS=auto
4763     samba_cv_TRY_QUOTAS=auto
4764     samba_cv_RUN_QUOTA_TESTS=auto
4765     #set sys quotas to auto in this case
4766     samba_cv_TRY_SYS_QUOTAS=auto
4767     ;;
4768   no)
4769     AC_MSG_RESULT(no)
4770     samba_cv_WITH_QUOTAS=no
4771     samba_cv_TRY_QUOTAS=no
4772     samba_cv_RUN_QUOTA_TESTS=no
4773     ;;
4774   *)
4775     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4776     ;;
4777   esac ],
4778   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4779 )
4780
4781 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4782 AC_ARG_WITH(sys-quotas,
4783 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4784 [ case "$withval" in
4785   yes)
4786     AC_MSG_RESULT(yes)
4787     samba_cv_WITH_SYS_QUOTAS=yes
4788     samba_cv_TRY_SYS_QUOTAS=yes
4789     samba_cv_RUN_QUOTA_TESTS=yes
4790     ;;
4791   auto)
4792     AC_MSG_RESULT(auto)
4793     samba_cv_WITH_SYS_QUOTAS=auto
4794     samba_cv_TRY_SYS_QUOTAS=auto
4795     samba_cv_RUN_QUOTA_TESTS=auto
4796     ;;
4797   no)
4798     AC_MSG_RESULT(no)
4799     samba_cv_WITH_SYS_QUOTAS=no
4800     samba_cv_TRY_SYS_QUOTAS=no
4801     ;;
4802   *)
4803     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4804     ;;
4805   esac ],
4806   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4807 )
4808
4809 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4810 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4811   case "$host_os" in
4812         *linux*)
4813             AC_MSG_RESULT(yes)
4814             samba_cv_TRY_SYS_QUOTAS=yes
4815             samba_cv_RUN_QUOTA_TESTS=yes
4816             ;;
4817         *)
4818             AC_MSG_RESULT(no)
4819             samba_cv_TRY_SYS_QUOTAS=no
4820             ;;
4821   esac
4822 fi
4823
4824 #############################################
4825 # only check for quota stuff if --with-quotas
4826 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4827
4828 case "$host_os" in
4829         # on linux we didn't need to test we have builtin support
4830         *linux*)
4831             samba_cv_SYSQUOTA_FOUND=yes
4832             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4833             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4834             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4835             AC_MSG_RESULT(yes)
4836
4837             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4838             samba_cv_found_xfs_header=yes
4839             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4840             AC_MSG_RESULT(yes)
4841             ;;
4842         *solaris*)
4843             # need to set this define when using static linking (BUG 1473)
4844             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4845             ;;
4846         *)
4847             ;;
4848 esac
4849
4850 # some broken header files need this
4851 AC_CHECK_HEADER(asm/types.h,[
4852             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4853             AC_ADD_INCLUDE(<asm/types.h>)
4854             ])
4855
4856 # For quotas on Veritas VxFS filesystems
4857 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4858
4859 # For quotas on Linux XFS filesystems
4860 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4861
4862 # For sys/quota.h and linux/quota.h
4863 AC_CHECK_HEADERS(sys/quota.h)
4864
4865 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4866 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4867 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4868 AC_TRY_COMPILE([
4869 #include "confdefs.h"
4870 #ifdef HAVE_SYS_TYPES_H
4871 #include <sys/types.h>
4872 #endif
4873 #ifdef HAVE_ASM_TYPES_H
4874 #include <asm/types.h>
4875 #endif
4876 #include <sys/quota.h>
4877 ],[int i = Q_XGETQUOTA;],
4878 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4879 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4880         samba_cv_found_xfs_header=yes
4881 fi
4882 fi
4883
4884 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4885 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4886 AC_TRY_COMPILE([
4887 #include "confdefs.h"
4888 #ifdef HAVE_SYS_QUOTA_H
4889 #include <sys/quota.h>
4890 #endif
4891 ],[
4892 struct dqblk D;
4893 D.dqb_fsoftlimit = 0;],
4894 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4895 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4896         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4897 fi
4898
4899 ##################
4900 # look for a working quota system
4901
4902 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4903 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4904 AC_TRY_RUN_STRICT([
4905 #define HAVE_QUOTACTL_4A 1
4906 #define AUTOCONF_TEST 1
4907 #include "confdefs.h"
4908 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4909            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4910 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4911     samba_cv_SYSQUOTA_FOUND=yes;
4912     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4913     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4914 fi
4915 fi
4916
4917 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4918 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4919 AC_TRY_RUN_STRICT([
4920 #define HAVE_QUOTACTL_4B 1
4921 #define AUTOCONF_TEST 1
4922 #include "confdefs.h"
4923 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4924            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4925 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4926     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4927     samba_cv_SYSQUOTA_FOUND=yes;
4928     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4929     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4930 fi
4931 fi
4932
4933 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4934 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4935 AC_TRY_RUN_STRICT([
4936 #define HAVE_QUOTACTL_3 1
4937 #define AUTOCONF_TEST 1
4938 #include "confdefs.h"
4939 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4940            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4941 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4942     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4943     samba_cv_SYSQUOTA_FOUND=yes;
4944     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4945     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4946 fi
4947 fi
4948
4949 #################################################
4950 # check for mntent.h and struct mntent
4951 AC_CHECK_HEADERS(mntent.h)
4952 #################################################
4953 # check for setmntent,getmntent,endmntent
4954 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4955
4956 #################################################
4957 # check for devnm.h and struct mntent
4958 AC_CHECK_HEADERS(devnm.h)
4959 #################################################
4960 # check for devnm
4961 AC_CHECK_FUNCS(devnm)
4962
4963 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4964     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4965         # if --with-sys-quotas=yes then build it
4966         # you have can use the get/set quota command smb.conf
4967         # options then
4968         samba_cv_SYSQUOTA_FOUND=auto
4969     fi
4970     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4971         # if --with-sys-quotas=yes then build it
4972         # you have can use the get/set quota command smb.conf
4973         # options then
4974         samba_cv_TRY_SYS_QUOTAS=auto
4975     fi
4976 fi
4977
4978 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4979 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4980 SAVE_CPPFLAGS="$CPPFLAGS"
4981 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4982 AC_TRY_COMPILE([
4983 #include "confdefs.h"
4984 #define NO_PROTO_H 1
4985 #define NO_CONFIG_H 1
4986 #define HAVE_SYS_QUOTAS 1
4987 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4988 #include "${srcdir-.}/lib/sysquotas.c"
4989 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4990 CPPFLAGS="$SAVE_CPPFLAGS"
4991 ])
4992 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4993 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4994     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4995         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4996         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4997         samba_cv_WE_USE_SYS_QUOTAS=yes
4998         AC_MSG_RESULT(yes)
4999     else
5000         AC_MSG_RESULT(no)
5001     fi
5002 fi
5003 fi
5004
5005 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
5006 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
5007 SAVE_CPPFLAGS="$CPPFLAGS"
5008 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5009 AC_TRY_COMPILE([
5010 #include "confdefs.h"
5011 #define NO_PROTO_H 1
5012 #define NO_CONFIG_H 1
5013 #define HAVE_SYS_QUOTAS 1
5014 #define HAVE_XFS_QUOTAS 1
5015 #include "${srcdir-.}/lib/sysquotas_xfs.c"
5016 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
5017 CPPFLAGS="$SAVE_CPPFLAGS"
5018 ])
5019 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
5020     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
5021         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
5022     fi
5023 fi
5024 fi
5025
5026 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
5027 SAVE_CPPFLAGS="$CPPFLAGS"
5028 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
5029 AC_TRY_COMPILE([
5030 #include "confdefs.h"
5031 #define NO_PROTO_H 1
5032 #define NO_CONFIG_H 1
5033 #include "${srcdir-.}/smbd/quotas.c"
5034 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
5035 CPPFLAGS="$SAVE_CPPFLAGS"
5036 ])
5037 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
5038 AC_MSG_CHECKING(whether to use the old quota support)
5039     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
5040       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
5041         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
5042         AC_MSG_RESULT(yes)
5043       else
5044         AC_MSG_RESULT(no)
5045       fi
5046     else
5047       AC_MSG_RESULT(no)
5048     fi
5049 fi
5050
5051 ####################
5052 # End of quota check samba_cv_RUN_QUOTA_TESTS
5053 fi
5054
5055 #################################################
5056 # check for experimental utmp accounting
5057
5058 AC_MSG_CHECKING(whether to support utmp accounting)
5059 WITH_UTMP=yes
5060 AC_ARG_WITH(utmp,
5061 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
5062 [ case "$withval" in
5063   no)
5064                 WITH_UTMP=no
5065                 ;;
5066   *)
5067                 WITH_UTMP=yes
5068                 ;;
5069   esac ],
5070 )
5071
5072 # utmp requires utmp.h
5073 # Note similar check earlier, when checking utmp details.
5074
5075 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
5076         utmp_no_reason=", no utmp.h on $host_os"
5077         WITH_UTMP=no
5078 fi
5079
5080 # Display test results
5081
5082 if test x"$WITH_UTMP" = x"yes"; then
5083         AC_MSG_RESULT(yes)
5084         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
5085 else
5086         AC_MSG_RESULT(no$utmp_no_reason)
5087 fi
5088
5089
5090 #################################################
5091 # these tests are taken from the GNU fileutils package
5092 AC_CHECKING(how to get filesystem space usage)
5093 space=no
5094
5095 # Test for statvfs64.
5096 if test $space = no; then
5097   # SVR4
5098   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
5099   [AC_TRY_RUN([
5100 #if defined(HAVE_UNISTD_H)
5101 #include <unistd.h>
5102 #endif
5103 #include <sys/types.h>
5104 #include <sys/statvfs.h>
5105   main ()
5106   {
5107     struct statvfs64 fsd;
5108     exit (statvfs64 (".", &fsd));
5109   }],
5110   fu_cv_sys_stat_statvfs64=yes,
5111   fu_cv_sys_stat_statvfs64=no,
5112   fu_cv_sys_stat_statvfs64=cross)])
5113   if test $fu_cv_sys_stat_statvfs64 = yes; then
5114     space=yes
5115     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
5116   fi
5117 fi
5118
5119 # Perform only the link test since it seems there are no variants of the
5120 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
5121 # because that got a false positive on SCO OSR5.  Adding the declaration
5122 # of a `struct statvfs' causes this test to fail (as it should) on such
5123 # systems.  That system is reported to work fine with STAT_STATFS4 which
5124 # is what it gets when this test fails.
5125 if test $space = no; then
5126   # SVR4
5127   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
5128                  [AC_TRY_LINK([#include <sys/types.h>
5129 #include <sys/statvfs.h>],
5130                               [struct statvfs fsd; statvfs (0, &fsd);],
5131                               fu_cv_sys_stat_statvfs=yes,
5132                               fu_cv_sys_stat_statvfs=no)])
5133   if test $fu_cv_sys_stat_statvfs = yes; then
5134     space=yes
5135     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
5136   fi
5137 fi
5138
5139 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
5140 # This is not the case on ancient Linux systems.
5141
5142 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
5143     AC_TRY_COMPILE([#include <sys/types.h>
5144 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
5145         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
5146 if test x"$samba_cv_fsid_int" = x"yes"; then
5147     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
5148 fi
5149
5150 # fsusage.c assumes that statvfs has an f_frsize entry. Some weird
5151 # systems use f_bsize.
5152 AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [
5153     AC_TRY_COMPILE([#include <sys/types.h>
5154 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0],
5155         samba_cv_frsize=yes,samba_cv_frsize=no)])
5156 if test x"$samba_cv_frsize" = x"yes"; then
5157     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
5158 fi
5159
5160 # Some systems use f_flag in struct statvfs while others use f_flags
5161 AC_CACHE_CHECK([that statvfs.statvfs_f_flag works],samba_cv_statvfs_f_flag, [
5162     AC_TRY_COMPILE([#include <sys/types.h>
5163 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flag = 0],
5164         samba_cv_statvfs_f_flag=yes,samba_cv_statvfs_f_flag=no)])
5165 if test x"$samba_cv_statvfs_f_flag" = x"yes"; then
5166     AC_DEFINE(HAVE_STATVFS_F_FLAG, 1, [Whether statvfs.f_flag exists])
5167 fi
5168
5169 AC_CACHE_CHECK([that statvfs.statvfs_f_flags works],samba_cv_statvfs_f_flags, [
5170     AC_TRY_COMPILE([#include <sys/types.h>
5171 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flags = 0],
5172         samba_cv_statvfs_f_flags=yes,samba_cv_statvfs_f_flags=no)])
5173 if test x"$samba_cv_statvfs_f_flags" = x"yes"; then
5174     AC_DEFINE(HAVE_STATVFS_F_FLAGS, 1, [Whether statvfs.f_flags exists])
5175 fi
5176
5177 if test $space = no; then
5178   # DEC Alpha running OSF/1
5179   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
5180   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
5181   [AC_TRY_RUN([
5182 #include <sys/param.h>
5183 #include <sys/types.h>
5184 #include <sys/mount.h>
5185   main ()
5186   {
5187     struct statfs fsd;
5188     fsd.f_fsize = 0;
5189     exit (statfs (".", &fsd, sizeof (struct statfs)));
5190   }],
5191   fu_cv_sys_stat_statfs3_osf1=yes,
5192   fu_cv_sys_stat_statfs3_osf1=no,
5193   fu_cv_sys_stat_statfs3_osf1=no)])
5194   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5195   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5196     space=yes
5197     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5198   fi
5199 fi
5200
5201 if test $space = no; then
5202 # AIX
5203   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5204 member (AIX, 4.3BSD)])
5205   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5206   [AC_TRY_RUN([
5207 #ifdef HAVE_SYS_PARAM_H
5208 #include <sys/param.h>
5209 #endif
5210 #ifdef HAVE_SYS_MOUNT_H
5211 #include <sys/mount.h>
5212 #endif
5213 #ifdef HAVE_SYS_VFS_H
5214 #include <sys/vfs.h>
5215 #endif
5216   main ()
5217   {
5218   struct statfs fsd;
5219   fsd.f_bsize = 0;
5220   exit (statfs (".", &fsd));
5221   }],
5222   fu_cv_sys_stat_statfs2_bsize=yes,
5223   fu_cv_sys_stat_statfs2_bsize=no,
5224   fu_cv_sys_stat_statfs2_bsize=no)])
5225   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5226   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5227     space=yes
5228     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5229   fi
5230 fi
5231
5232 if test $space = no; then
5233 # SVR3
5234   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5235   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5236   [AC_TRY_RUN([#include <sys/types.h>
5237 #include <sys/statfs.h>
5238   main ()
5239   {
5240   struct statfs fsd;
5241   exit (statfs (".", &fsd, sizeof fsd, 0));
5242   }],
5243     fu_cv_sys_stat_statfs4=yes,
5244     fu_cv_sys_stat_statfs4=no,
5245     fu_cv_sys_stat_statfs4=no)])
5246   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5247   if test $fu_cv_sys_stat_statfs4 = yes; then
5248     space=yes
5249     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5250   fi
5251 fi
5252
5253 if test $space = no; then
5254 # 4.4BSD and NetBSD
5255   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5256 member (4.4BSD and NetBSD)])
5257   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5258   [AC_TRY_RUN([#include <sys/types.h>
5259 #ifdef HAVE_SYS_PARAM_H
5260 #include <sys/param.h>
5261 #endif
5262 #ifdef HAVE_SYS_MOUNT_H
5263 #include <sys/mount.h>
5264 #endif
5265   main ()
5266   {
5267   struct statfs fsd;
5268   fsd.f_fsize = 0;
5269   exit (statfs (".", &fsd));
5270   }],
5271   fu_cv_sys_stat_statfs2_fsize=yes,
5272   fu_cv_sys_stat_statfs2_fsize=no,
5273   fu_cv_sys_stat_statfs2_fsize=no)])
5274   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5275   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5276     space=yes
5277         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5278   fi
5279 fi
5280
5281 if test $space = no; then
5282   # Ultrix
5283   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5284   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5285   [AC_TRY_RUN([#include <sys/types.h>
5286 #ifdef HAVE_SYS_PARAM_H
5287 #include <sys/param.h>
5288 #endif
5289 #ifdef HAVE_SYS_MOUNT_H
5290 #include <sys/mount.h>
5291 #endif
5292 #ifdef HAVE_SYS_FS_TYPES_H
5293 #include <sys/fs_types.h>
5294 #endif
5295   main ()
5296   {
5297   struct fs_data fsd;
5298   /* Ultrix's statfs returns 1 for success,
5299      0 for not mounted, -1 for failure.  */
5300   exit (statfs (".", &fsd) != 1);
5301   }],
5302   fu_cv_sys_stat_fs_data=yes,
5303   fu_cv_sys_stat_fs_data=no,
5304   fu_cv_sys_stat_fs_data=no)])
5305   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5306   if test $fu_cv_sys_stat_fs_data = yes; then
5307     space=yes
5308     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5309   fi
5310 fi
5311
5312 #
5313 # As a gating factor for large file support, in order to
5314 # use <4GB files we must have the following minimal support
5315 # available.
5316 # long long, and a 64 bit off_t or off64_t.
5317 # If we don't have all of these then disable large
5318 # file support.
5319 #
5320 AC_MSG_CHECKING([if large file support can be enabled])
5321 AC_TRY_COMPILE([
5322 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5323 #include <sys/types.h>
5324 #else
5325 __COMPILE_ERROR_
5326 #endif
5327 ],
5328 [int i],
5329 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5330 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5331         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5332 fi
5333 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5334
5335 #################################################
5336 # check for cluster extensions
5337
5338 CTDB_CFLAGS=""
5339 AC_SUBST(CTDB_CFLAGS)
5340 AC_ARG_WITH(ctdb,
5341 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
5342 [ case "$withval" in
5343   yes|no)
5344     AC_MSG_WARN([--with-ctdb called without argument])
5345     ;;
5346   *)
5347     CTDB_CPPFLAGS="-I$withval/include"
5348     ;;
5349   esac])
5350
5351 SAVED_CPPFLAGS="$CPPFLAGS"
5352 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS} $CTDB_CPPFLAGS"
5353 ctdb_broken="missing or broken headers"
5354
5355 AC_CHECK_HEADERS(ctdb.h ctdb_private.h,,,[
5356 #include "confdefs.h"
5357 #define NO_CONFIG_H
5358 #include "replace.h"
5359 #include "system/wait.h"
5360 #include "system/network.h"
5361 #define private #error __USED_RESERVED_WORD_private__
5362 #include <talloc.h>
5363 #include <tdb.h>
5364 #include <ctdb.h>
5365 ])
5366
5367 AC_HAVE_DECL(CTDB_CONTROL_TRANS3_COMMIT,[
5368 #include "confdefs.h"
5369 #define NO_CONFIG_H
5370 #include "replace.h"
5371 #include "system/wait.h"
5372 #include "system/network.h"
5373 #include <talloc.h>
5374 #include <tdb.h>
5375 #include <ctdb.h>
5376 #include <ctdb_private.h>
5377 ])
5378 if test x"$ac_cv_have_CTDB_CONTROL_TRANS3_COMMIT_decl" = x"yes"; then
5379         ctdb_broken=no
5380 else
5381         ctdb_broken="ctdb transaction support missing or too old"
5382 fi
5383
5384 # in ctdb 1.0.57 ctdb_control_tcp was temparary renamed to ctdb_tcp_client
5385 AC_CHECK_TYPE(struct ctdb_tcp_client,[
5386         AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
5387 ],,[
5388 #include "confdefs.h"
5389 #define NO_CONFIG_H
5390 #include "replace.h"
5391 #include "system/wait.h"
5392 #include "system/network.h"
5393 #include <talloc.h>
5394 #include <tdb.h>
5395 #include <ctdb.h>
5396 #include <ctdb_private.h>
5397 ])
5398
5399 AC_CHECK_TYPE(struct ctdb_control_tcp,[
5400         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5401 ],[
5402         ctdb_broken="missing struct ctdb_control_tcp"
5403 ],[
5404 #include "confdefs.h"
5405 #define NO_CONFIG_H
5406 #include "replace.h"
5407 #include "system/wait.h"
5408 #include "system/network.h"
5409 #include <talloc.h>
5410 #include <tdb.h>
5411 #include <ctdb.h>
5412 #include <ctdb_private.h>
5413 ])
5414
5415 AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5416         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5417 ],,[
5418 #include "confdefs.h"
5419 #define NO_CONFIG_H
5420 #include "replace.h"
5421 #include "system/wait.h"
5422 #include "system/network.h"
5423 #include <talloc.h>
5424 #include <tdb.h>
5425 #include <ctdb.h>
5426 #include <ctdb_private.h>
5427 ])
5428 CPPFLAGS="$SAVED_CPPFLAGS"
5429
5430 AC_MSG_CHECKING(cluster support)
5431 AC_ARG_WITH(cluster-support,
5432 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
5433
5434 if test x"$with_cluster_support" = x ; then
5435         with_cluster_support="auto"
5436 fi
5437
5438 if test x"$ac_cv_header_ctdb_private_h" != x"yes"; then
5439         if test "x$with_cluster_support" = "xyes"; then
5440                 AC_MSG_ERROR("ctdb_private.h is required for cluster support")
5441         fi
5442         with_cluster_support=no
5443 fi
5444
5445 if test x"$ctdb_broken" != x"no"; then
5446         if test "x$with_cluster_support" = "xyes"; then
5447                 AC_MSG_ERROR(["cluster support: $ctdb_broken"])
5448         fi
5449         with_cluster_support=no
5450 fi
5451
5452 if test "x$with_cluster_support" != "xno"; then
5453     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5454     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5455     AC_MSG_RESULT(yes)
5456 else
5457     AC_MSG_RESULT(no)
5458 fi
5459
5460 #################################################
5461 # check for ACL support
5462
5463 AC_MSG_CHECKING(whether to support ACLs)
5464 AC_ARG_WITH(acl-support,
5465 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5466 [ case "$withval" in
5467         yes|no)
5468                 with_acl_support="$withval"
5469                 ;;
5470   esac ])
5471
5472 if test x"$with_acl_support" = x ; then
5473         with_acl_support="auto"
5474 fi
5475
5476 AC_MSG_RESULT($with_acl_support)
5477
5478 if test x"$with_acl_support" = x"no"; then
5479         AC_MSG_RESULT(Disabling ACL support)
5480         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5481 else
5482         AC_MSG_NOTICE(checking whether ACL support is available:)
5483         case "$host_os" in
5484         *sysv5*)
5485                 AC_MSG_NOTICE(Using UnixWare ACLs)
5486                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5487                 default_static_modules="$default_static_modules vfs_solarisacl"
5488                 ;;
5489         *solaris*)
5490                 AC_MSG_NOTICE(Using solaris ACLs)
5491                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5492                 ACL_LIBS="$ACL_LIBS -lsec"
5493                 default_static_modules="$default_static_modules vfs_solarisacl"
5494                 ;;
5495         *hpux*)
5496                 AC_MSG_NOTICE(Using HPUX ACLs)
5497                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5498                 default_static_modules="$default_static_modules vfs_hpuxacl"
5499                 ;;
5500         *irix*)
5501                 AC_MSG_NOTICE(Using IRIX ACLs)
5502                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5503                 default_static_modules="$default_static_modules vfs_irixacl"
5504                 ;;
5505         *aix*)
5506                 AC_MSG_NOTICE(Using AIX ACLs)
5507                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5508                 default_static_modules="$default_static_modules vfs_aixacl"
5509                 ;;
5510         *osf*)
5511                 AC_MSG_NOTICE(Using Tru64 ACLs)
5512                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5513                 ACL_LIBS="$ACL_LIBS -lpacl"
5514                 default_static_modules="$default_static_modules vfs_tru64acl"
5515                 ;;
5516         *darwin*)
5517                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5518                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5519                 ;;
5520         *)
5521                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5522                 case "$host_os" in
5523                 *linux*)
5524                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5525                         ;;
5526                 esac
5527                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5528                         acl_LIBS=$LIBS
5529                         LIBS="$LIBS $ACL_LIBS"
5530                         AC_TRY_LINK([
5531                                 #include <sys/types.h>
5532                                 #include <sys/acl.h>
5533                         ],[
5534                                 acl_t acl;
5535                                 int entry_id;
5536                                 acl_entry_t *entry_p;
5537                                 return acl_get_entry(acl, entry_id, entry_p);
5538                         ],
5539                         [samba_cv_HAVE_POSIX_ACLS=yes],
5540                         [samba_cv_HAVE_POSIX_ACLS=no])
5541                         LIBS=$acl_LIBS
5542                 ])
5543                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5544                         AC_MSG_NOTICE(Using posix ACLs)
5545                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5546                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5547                                 acl_LIBS=$LIBS
5548                                 LIBS="$LIBS $ACL_LIBS"
5549                                 AC_TRY_LINK([
5550                                         #include <sys/types.h>
5551                                         #include <sys/acl.h>
5552                                 ],[
5553                                         acl_permset_t permset_d;
5554                                         acl_perm_t perm;
5555                                         return acl_get_perm_np(permset_d, perm);
5556                                 ],
5557                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5558                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5559                                 LIBS=$acl_LIBS
5560                         ])
5561                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5562                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5563                         fi
5564                         default_static_modules="$default_static_modules vfs_posixacl"
5565                 else
5566                         AC_MSG_NOTICE(ACL support is not avaliable)
5567                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5568                 fi
5569                 ;;
5570         esac
5571 fi # with_acl_support
5572
5573
5574
5575 #################################################
5576 # check for AIO support
5577
5578 AC_MSG_CHECKING(whether to support asynchronous io)
5579 AC_ARG_WITH(aio-support,
5580 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5581 [ case "$withval" in
5582   yes)
5583
5584         AC_MSG_RESULT(yes)
5585         case "$host_os" in
5586         *)
5587                 AIO_LIBS=$LIBS
5588                 no_rt_LIBS=$LIBS
5589                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5590                 LIBS=$no_rt_LIBS
5591                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5592                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5593                 aio_LIBS=$LIBS
5594                 LIBS=$AIO_LIBS
5595                 AC_TRY_LINK([#include <sys/types.h>
5596 #include <aio.h>],
5597 [ struct aiocb a; return aio_read(&a);],
5598 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5599                 LIBS=$aio_LIBS])
5600                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5601                 aio_LIBS=$LIBS
5602                 LIBS=$AIO_LIBS
5603                 AC_TRY_LINK([#include <sys/types.h>
5604 #include <aio.h>],
5605 [ struct aiocb64 a; return aio_read64(&a);],
5606 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5607                 LIBS=$aio_LIBS])
5608                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5609                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5610                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5611                         LIBS=$AIO_LIBS
5612                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5613                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5614                         LIBS=$AIO_LIBS
5615                 fi
5616
5617                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5618                         AC_MSG_CHECKING(for aio_read)
5619                         AC_LINK_IFELSE([#include <aio.h>
5620 int main() { struct aiocb a; return aio_read(&a); }],
5621 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5622 [AC_MSG_RESULT(no)])
5623
5624                         AC_MSG_CHECKING(for aio_write)
5625                         AC_LINK_IFELSE([#include <aio.h>
5626 int main() { struct aiocb a; return aio_write(&a); }],
5627 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5628 [AC_MSG_RESULT(no)])
5629
5630                         AC_MSG_CHECKING(for aio_fsync)
5631                         AC_LINK_IFELSE([#include <aio.h>
5632 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5633 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5634 [AC_MSG_RESULT(no)])
5635
5636                         AC_MSG_CHECKING(for aio_return)
5637                         AC_LINK_IFELSE([#include <aio.h>
5638 int main() { struct aiocb a; return aio_return(&a); }],
5639 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5640 [AC_MSG_RESULT(no)])
5641
5642                         AC_MSG_CHECKING(for aio_error)
5643                         AC_LINK_IFELSE([#include <aio.h>
5644 int main() { struct aiocb a; return aio_error(&a); }],
5645 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5646 [AC_MSG_RESULT(no)])
5647
5648                         AC_MSG_CHECKING(for aio_cancel)
5649                         AC_LINK_IFELSE([#include <aio.h>
5650 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5651 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5652 [AC_MSG_RESULT(no)])
5653
5654                         AC_MSG_CHECKING(for aio_suspend)
5655                         AC_LINK_IFELSE([#include <aio.h>
5656 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5657 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5658 [AC_MSG_RESULT(no)])
5659                 fi
5660
5661                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5662                         AC_MSG_CHECKING(for aio_read64)
5663                         AC_LINK_IFELSE([#include <aio.h>
5664 int main() { struct aiocb a; return aio_read64(&a); }],
5665 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5666 [AC_MSG_RESULT(no)])
5667
5668                         AC_MSG_CHECKING(for aio_write64)
5669                         AC_LINK_IFELSE([#include <aio.h>
5670 int main() { struct aiocb a; return aio_write64(&a); }],
5671 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5672 [AC_MSG_RESULT(no)])
5673
5674                         AC_MSG_CHECKING(for aio_fsync64)
5675                         AC_LINK_IFELSE([#include <aio.h>
5676 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5677 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5678 [AC_MSG_RESULT(no)])
5679
5680                         AC_MSG_CHECKING(for aio_return64)
5681                         AC_LINK_IFELSE([#include <aio.h>
5682 int main() { struct aiocb a; return aio_return64(&a); }],
5683 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5684 [AC_MSG_RESULT(no)])
5685
5686                         AC_MSG_CHECKING(for aio_error64)
5687                         AC_LINK_IFELSE([#include <aio.h>
5688 int main() { struct aiocb a; return aio_error64(&a); }],
5689 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5690 [AC_MSG_RESULT(no)])
5691
5692                         AC_MSG_CHECKING(for aio_cancel64)
5693                         AC_LINK_IFELSE([#include <aio.h>
5694 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5695 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5696 [AC_MSG_RESULT(no)])
5697
5698                         AC_MSG_CHECKING(for aio_suspend64)
5699                         AC_LINK_IFELSE([#include <aio.h>
5700 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5701 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5702 [AC_MSG_RESULT(no)])
5703                 fi
5704             ;;
5705         esac
5706         ;;
5707   *)
5708     AC_MSG_RESULT(no)
5709     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5710     ;;
5711   esac ],
5712   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5713   AC_MSG_RESULT(no)
5714 )
5715
5716 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5717         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5718                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5719                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5720         fi
5721 fi
5722
5723 #################################################
5724 # check for sendfile support
5725
5726 with_sendfile_support=yes
5727 AC_MSG_CHECKING(whether to check to support sendfile)
5728 AC_ARG_WITH(sendfile-support,
5729 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5730 [ case "$withval" in
5731   yes)
5732
5733         AC_MSG_RESULT(yes);
5734
5735         case "$host_os" in
5736         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5737                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5738                 AC_TRY_LINK([#include <sys/sendfile.h>],
5739 [\
5740 int tofd, fromfd;
5741 off64_t offset;
5742 size_t total;
5743 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5744 ],
5745 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5746
5747                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5748                 AC_TRY_LINK([#include <sys/sendfile.h>],
5749 [\
5750 int tofd, fromfd;
5751 off_t offset;
5752 size_t total;
5753 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5754 ],
5755 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5756
5757 # Try and cope with broken Linux sendfile....
5758                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5759                 AC_TRY_LINK([\
5760 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5761 #undef _FILE_OFFSET_BITS
5762 #endif
5763 #include <sys/sendfile.h>],
5764 [\
5765 int tofd, fromfd;
5766 off_t offset;
5767 size_t total;
5768 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5769 ],
5770 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5771
5772         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5773                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5774                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5775                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5776         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5777                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5778                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5779                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5780         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5781                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5782                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5783         else
5784                 AC_MSG_RESULT(no);
5785         fi
5786
5787         ;;
5788         *freebsd* | *dragonfly* )
5789                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5790                 AC_TRY_LINK([\
5791 #include <sys/types.h>
5792 #include <unistd.h>
5793 #include <sys/socket.h>
5794 #include <sys/uio.h>],
5795 [\
5796         int fromfd, tofd, ret, total=0;
5797         off_t offset, nwritten;
5798         struct sf_hdtr hdr;
5799         struct iovec hdtrl;
5800         hdr.headers = &hdtrl;
5801         hdr.hdr_cnt = 1;
5802         hdr.trailers = NULL;
5803         hdr.trl_cnt = 0;
5804         hdtrl.iov_base = NULL;
5805         hdtrl.iov_len = 0;
5806         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5807 ],
5808 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5809
5810         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5811                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5812                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5813                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5814         else
5815                 AC_MSG_RESULT(no);
5816         fi
5817         ;;
5818
5819         *hpux*)
5820                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5821                 AC_TRY_LINK([\
5822 #include <sys/socket.h>
5823 #include <sys/uio.h>],
5824 [\
5825         int fromfd, tofd;
5826         size_t total=0;
5827         struct iovec hdtrl[2];
5828         ssize_t nwritten;
5829         off64_t offset;
5830
5831         hdtrl[0].iov_base = 0;
5832         hdtrl[0].iov_len = 0;
5833
5834         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5835 ],
5836 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5837         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5838                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5839                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5840                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5841         else
5842                 AC_MSG_RESULT(no);
5843         fi
5844
5845                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5846                 AC_TRY_LINK([\
5847 #include <sys/socket.h>
5848 #include <sys/uio.h>],
5849 [\
5850         int fromfd, tofd;
5851         size_t total=0;
5852         struct iovec hdtrl[2];
5853         ssize_t nwritten;
5854         off_t offset;
5855
5856         hdtrl[0].iov_base = 0;
5857         hdtrl[0].iov_len = 0;
5858
5859         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5860 ],
5861 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5862         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5863                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5864                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5865                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5866         else
5867                 AC_MSG_RESULT(no);
5868         fi
5869         ;;
5870
5871         *solaris*)
5872                 AC_CHECK_LIB(sendfile,sendfilev)
5873                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5874                 AC_TRY_LINK([\
5875 #include <sys/sendfile.h>],
5876 [\
5877         int sfvcnt;
5878         size_t xferred;
5879         struct sendfilevec vec[2];
5880         ssize_t nwritten;
5881         int tofd;
5882
5883         sfvcnt = 2;
5884
5885         vec[0].sfv_fd = SFV_FD_SELF;
5886         vec[0].sfv_flag = 0;
5887         vec[0].sfv_off = 0;
5888         vec[0].sfv_len = 0;
5889
5890         vec[1].sfv_fd = 0;
5891         vec[1].sfv_flag = 0;
5892         vec[1].sfv_off = 0;
5893         vec[1].sfv_len = 0;
5894         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5895 ],
5896 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5897
5898         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5899                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5900                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5901                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5902         else
5903                 AC_MSG_RESULT(no);
5904         fi
5905
5906                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5907                 AC_TRY_LINK([\
5908 #include <sys/sendfile.h>],
5909 [\
5910         int sfvcnt;
5911         size_t xferred;
5912         struct sendfilevec vec[2];
5913         ssize_t nwritten;
5914         int tofd;
5915
5916         sfvcnt = 2;
5917
5918         vec[0].sfv_fd = SFV_FD_SELF;
5919         vec[0].sfv_flag = 0;
5920         vec[0].sfv_off = 0;
5921         vec[0].sfv_len = 0;
5922
5923         vec[1].sfv_fd = 0;
5924         vec[1].sfv_flag = 0;
5925         vec[1].sfv_off = 0;
5926         vec[1].sfv_len = 0;
5927         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5928 ],
5929 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5930
5931         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5932                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5933                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5934                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5935         else
5936                 AC_MSG_RESULT(no);
5937         fi
5938         ;;
5939         *aix*)
5940                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5941                 AC_TRY_LINK([\
5942 #include <sys/socket.h>],
5943 [\
5944         int fromfd, tofd;
5945         size_t total=0;
5946         struct sf_parms hdtrl;
5947         ssize_t nwritten;
5948         off64_t offset;
5949
5950         hdtrl.header_data = 0;
5951         hdtrl.header_length = 0;
5952         hdtrl.file_descriptor = fromfd;
5953         hdtrl.file_offset = 0;
5954         hdtrl.file_bytes = 0;
5955         hdtrl.trailer_data = 0;
5956         hdtrl.trailer_length = 0;
5957
5958         nwritten = send_file(&tofd, &hdtrl, 0);
5959 ],
5960 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5961         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5962                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5963                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5964                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5965         else
5966                 AC_MSG_RESULT(no);
5967         fi
5968         ;;
5969         *)
5970         ;;
5971         esac
5972         ;;
5973   *)
5974     AC_MSG_RESULT(no)
5975     ;;
5976   esac ],
5977   AC_MSG_RESULT(yes)
5978 )
5979
5980 ############################################
5981 # See if we have the Linux readahead syscall.
5982
5983 AC_CACHE_CHECK([for Linux readahead],
5984                 samba_cv_HAVE_LINUX_READAHEAD,[
5985     AC_TRY_LINK([
5986 #if defined(HAVE_UNISTD_H)
5987 #include <unistd.h>
5988 #endif
5989 #include <fcntl.h>],
5990     [ssize_t err = readahead(0,0,0x80000);],
5991     samba_cv_HAVE_LINUX_READAHEAD=yes,
5992     samba_cv_HAVE_LINUX_READAHEAD=no)])
5993
5994 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5995   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5996              [Whether Linux readahead is available])
5997 fi
5998
5999 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
6000
6001 ############################################
6002 # See if we have the posix_fadvise syscall.
6003
6004 AC_CACHE_CHECK([for posix_fadvise],
6005                 samba_cv_HAVE_POSIX_FADVISE,[
6006     AC_TRY_LINK([
6007 #if defined(HAVE_UNISTD_H)
6008 #include <unistd.h>
6009 #endif
6010 #include <fcntl.h>],
6011     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
6012     samba_cv_HAVE_POSIX_FADVISE=yes,
6013     samba_cv_HAVE_POSIX_FADVISE=no)])
6014
6015 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
6016   AC_DEFINE(HAVE_POSIX_FADVISE,1,
6017              [Whether posix_fadvise is available])
6018 fi
6019
6020 ############################################
6021 # See if we have the Linux splice syscall.
6022
6023 case "$host_os" in
6024 *linux*)
6025 AC_CACHE_CHECK([for Linux splice],
6026                 samba_cv_HAVE_LINUX_SPLICE,[
6027     AC_TRY_LINK([
6028 #if defined(HAVE_UNISTD_H)
6029 #include <unistd.h>
6030 #endif
6031 #include <fcntl.h>],
6032     [long ret = splice(0,0,1,0,400,0);],
6033     samba_cv_HAVE_LINUX_SPLICE=yes,
6034     samba_cv_HAVE_LINUX_SPLICE=no)])
6035 ;;
6036 *)
6037 samba_cv_HAVE_LINUX_SPLICE=no
6038 ;;
6039 esac
6040
6041 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
6042   AC_DEFINE(HAVE_LINUX_SPLICE,1,
6043              [Whether Linux splice is available])
6044 fi
6045
6046 AC_HAVE_DECL(splice, [#include <fcntl.h>])
6047
6048 ############################################
6049 # See if we have the a broken readlink syscall.
6050
6051 AC_CACHE_CHECK([for a broken readlink syscall],samba_cv_HAVE_BROKEN_READLINK,[
6052 AC_TRY_RUN([#include "${srcdir-.}/../tests/readlink.c"],
6053         samba_cv_HAVE_BROKEN_READLINK=no,samba_cv_HAVE_BROKEN_READLINK=yes,samba_cv_HAVE_BROKEN_READLINK=cross)
6054 ])
6055 if test x"$samba_cv_HAVE_BROKEN_READLINK" = x"yes"; then
6056         AC_DEFINE(HAVE_BROKEN_READLINK,1,[Whether the readlink syscall is broken])
6057 fi
6058
6059 #################################################
6060 # Check whether winbind is supported on this platform.  If so we need to
6061 # build and install client programs, sbin programs and shared libraries
6062
6063 AC_MSG_CHECKING(whether to build winbind)
6064
6065 # Initially, the value of $host_os decides whether winbind is supported
6066
6067 HAVE_WINBIND=yes
6068 HAVE_WBCLIENT=no
6069
6070 # Define external wbclient library to link against.  This disables winbind.
6071 # We define this here so --with-winbind can override it.
6072 AC_ARG_WITH(wbclient,
6073 [AS_HELP_STRING([--with-wbclient], [Use external wbclient (optional)])],
6074 [
6075   case "$withval" in
6076         no)
6077                 HAVE_WBCLIENT=no
6078                 ;;
6079         yes)
6080                 HAVE_WBCLIENT=yes
6081                 HAVE_WINBIND=no
6082                 ;;
6083         *)
6084                 HAVE_WBCLIENT=yes
6085                 HAVE_WINBIND=no
6086                 WBCLIENT_INCLUDES="-I$withval/include"
6087                 WBCLIENT_LDFLAGS="-L$withval/lib"
6088                 ;;
6089   esac ],
6090 )
6091
6092 AC_SUBST(WBCLIENT_INCLUDES)
6093 AC_SUBST(WBCLIENT_LDFLAGS)
6094 AC_SUBST(WBCLIENT_LIBS)
6095
6096
6097 # Define the winbind shared library name and any specific linker flags
6098 # it needs to be built with.
6099
6100 WINBIND_NSS="../nsswitch/libnss_winbind.$SHLIBEXT"
6101 WINBIND_WINS_NSS="../nsswitch/libnss_wins.$SHLIBEXT"
6102 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
6103 NSSSONAMEVERSIONSUFFIX=""
6104
6105 case "$host_os" in
6106         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
6107                 NSSSONAMEVERSIONSUFFIX=".2"
6108                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_linux.o"
6109                 ;;
6110         *freebsd[[5-9]]*)
6111                 # FreeBSD winbind client is implemented as a wrapper around
6112                 # the Linux version.
6113                 NSSSONAMEVERSIONSUFFIX=".1"
6114                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_freebsd.o \
6115                     ../nsswitch/winbind_nss_linux.o"
6116                 WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
6117                 WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
6118                 ;;
6119
6120         *netbsd*[[3-9]]*)
6121                 # NetBSD winbind client is implemented as a wrapper
6122                 # around the Linux version. It needs getpwent_r() to
6123                 # indicate libc's use of the correct nsdispatch API.
6124                 #
6125                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
6126                         WINBIND_NSS_EXTRA_OBJS="\
6127                             ../nsswitch/winbind_nss_netbsd.o \
6128                             ../nsswitch/winbind_nss_linux.o"
6129                         WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
6130                         WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
6131                 else
6132                         HAVE_WINBIND=no
6133                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
6134                 fi
6135                 ;;
6136         *irix*)
6137                 # IRIX has differently named shared libraries
6138                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_irix.o"
6139                 WINBIND_NSS="../nsswitch/libns_winbind.$SHLIBEXT"
6140                 WINBIND_WINS_NSS="../nsswitch/libns_wins.$SHLIBEXT"
6141                 ;;
6142         *solaris*)
6143                 # Solaris winbind client is implemented as a wrapper around
6144                 # the Linux version.
6145                 NSSSONAMEVERSIONSUFFIX=".1"
6146                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o \
6147                     ../nsswitch/winbind_nss_linux.o"
6148                 ;;
6149         *hpux11*)
6150                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o"
6151                 ;;
6152         *aix*)
6153                 # AIX has even differently named shared libraries.  No
6154                 # WINS support has been implemented yet.
6155                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_aix.o"
6156                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
6157                 WINBIND_NSS="../nsswitch/WINBIND"
6158                 WINBIND_WINS_NSS=""
6159                 ;;
6160         *)
6161                 HAVE_WINBIND=no
6162                 winbind_no_reason=", unsupported on $host_os"
6163                 ;;
6164 esac
6165
6166 # Check the setting of --with-winbind
6167
6168 AC_ARG_WITH(winbind,
6169 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
6170 [
6171   case "$withval" in
6172         yes)
6173                 HAVE_WINBIND=yes
6174                 HAVE_WBCLIENT=no
6175                 ;;
6176         no)
6177                 HAVE_WINBIND=no
6178                 winbind_reason=""
6179                 ;;
6180   esac ],
6181 )
6182
6183 # We need unix domain sockets for winbind
6184
6185 if test x"$HAVE_WINBIND" = x"yes"; then
6186         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
6187                 winbind_no_reason=", no unix domain socket support on $host_os"
6188                 HAVE_WINBIND=no
6189         fi
6190 fi
6191
6192 # Display test results
6193
6194 if test x"$HAVE_WINBIND" = x"no"; then
6195         WINBIND_NSS=""
6196         WINBIND_WINS_NSS=""
6197 fi
6198 if test x"$HAVE_WBCLIENT" = x"yes"; then
6199         AC_CHECK_LIB(wbclient, wbcInterfaceDetails,
6200                      [LIBWBCLIENT_LIBS="-lwbclient"], AC_MSG_ERROR([Could not find wbclient]), [$WBCLIENT_LDFLAGS])
6201         LIBWBCLIENT_LIBS="$LIBWBCLIENT_LIBS $WBCLIENT_LDFLAGS"
6202         AC_MSG_RESULT(yes)
6203         AC_DEFINE(WITH_WINBIND,1,[Whether to link to wbclient])
6204         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6205 else
6206         if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
6207                 BUILD_LIBWBCLIENT_SHARED=no
6208         else
6209                 BUILD_LIBWBCLIENT_SHARED=yes
6210         fi
6211
6212         LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
6213         LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
6214         LIBWBCLIENT_SOVER=0
6215         if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
6216                 NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6217                 ## Only worry about libwbclient if we have shared
6218                 # library support
6219                 LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
6220                 LIBWBCLIENT=libwbclient
6221                 INSTALL_LIBWBCLIENT=installlibwbclient
6222                 UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
6223                 LIBWBCLIENT_LIBS="-lwbclient"
6224         else
6225                 LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
6226                 LIBWBCLIENT_LIBS=$LIBWBCLIENT_STATIC_TARGET
6227         fi
6228 fi
6229
6230 if test x"$HAVE_WINBIND" = x"yes"; then
6231         AC_MSG_RESULT(yes)
6232         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6233
6234         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6235         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6236         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6237                 PAM_MODULES="$PAM_MODULES pam_winbind"
6238                 INSTALL_PAM_MODULES="installpammodules"
6239                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6240         fi
6241 else
6242         AC_MSG_RESULT(no$winbind_no_reason)
6243 fi
6244
6245 AC_SUBST(WINBIND_NSS)
6246 AC_SUBST(WINBIND_WINS_NSS)
6247 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
6248 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
6249 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
6250
6251 AC_SUBST(WINBIND_KRB5_LOCATOR)
6252
6253 # Solaris 10 does have new member in nss_XbyY_key
6254 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6255                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6256                 [#include <nss_dbdefs.h>])
6257
6258 # Solaris has some extra fields in struct passwd that need to be
6259 # initialised otherwise nscd crashes.
6260
6261 AC_CHECK_MEMBER(struct passwd.pw_comment,
6262                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6263                 [#include <pwd.h>])
6264
6265 AC_CHECK_MEMBER(struct passwd.pw_age,
6266                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6267                 [#include <pwd.h>])
6268
6269 # AIX 4.3.x and 5.1 do not have as many members in
6270 # struct secmethod_table as AIX 5.2
6271 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6272        [#include <usersec.h>])
6273 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6274        [#include <usersec.h>])
6275
6276 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6277 AC_TRY_COMPILE([#include <sys/types.h>
6278 #include <sys/socket.h>],
6279 [struct ucred cred;
6280  socklen_t cred_len;
6281  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6282 ],
6283 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6284 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6285     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6286 fi
6287
6288
6289 #################################################
6290 # Check to see if we should use the included popt
6291
6292 AC_ARG_WITH(included-popt,
6293 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
6294 [
6295   case "$withval" in
6296         yes)
6297                 INCLUDED_POPT=yes
6298                 ;;
6299         no)
6300                 INCLUDED_POPT=no
6301                 ;;
6302   esac ],
6303 )
6304 if test x"$INCLUDED_POPT" != x"yes"; then
6305     AC_CHECK_LIB(popt, poptGetContext,
6306                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6307 fi
6308
6309 AC_MSG_CHECKING(whether to use included popt)
6310 if test x"$INCLUDED_POPT" = x"yes"; then
6311     AC_MSG_RESULT(yes)
6312     BUILD_POPT='$(POPT_OBJ)'
6313     POPTLIBS='$(POPT_OBJ)'
6314     FLAGS1="-I\$(srcdir)/../lib/popt"
6315 else
6316     AC_MSG_RESULT(no)
6317         BUILD_POPT=""
6318     POPTLIBS="-lpopt"
6319 fi
6320 AC_SUBST(BUILD_POPT)
6321 AC_SUBST(POPTLIBS)
6322 AC_SUBST(FLAGS1)
6323
6324 #################################################
6325 # Check if user wants DNS service discovery support
6326
6327 AC_ARG_ENABLE(dnssd,
6328 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=no)])])
6329
6330 AC_SUBST(DNSSD_LIBS)
6331 if test x"$enable_dnssd" = x"yes"; then
6332     have_dnssd_support=yes
6333
6334     AC_CHECK_HEADERS(dns_sd.h)
6335     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6336         have_dnssd_support=no
6337     fi
6338
6339     # On Darwin the DNSSD API is in libc, but on other platforms it's
6340     # probably in -ldns_sd
6341     AC_CHECK_FUNCS(DNSServiceRegister)
6342     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6343     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6344             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6345         have_dnssd_support=no
6346     fi
6347
6348     if test x"$have_dnssd_support" = x"yes"; then
6349         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6350                 [Whether to enable DNS service discovery support])
6351     else
6352         if test x"$enable_dnssd" = x"yes"; then
6353             AC_MSG_ERROR(DNS service discovery support not available)
6354         fi
6355     fi
6356
6357 fi
6358
6359 #################################################
6360 # Check if user wants avahi support
6361
6362 AC_ARG_ENABLE(avahi,
6363 [AS_HELP_STRING([--enable-avahi], [Enable Avahi support (default=auto)])])
6364
6365 if test x"$enable_avahi" != x"no"; then
6366     have_avahi_support=yes
6367
6368     AC_CHECK_HEADERS(avahi-common/watch.h)
6369     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6370         have_avahi_support=no
6371     fi
6372
6373     AC_CHECK_HEADERS(avahi-client/client.h)
6374     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6375         have_avahi_support=no
6376     fi
6377
6378     save_LIBS="$LIBS"
6379     AC_CHECK_LIB(avahi-client, avahi_client_new,[have_avahi_client_new=yes])
6380     AC_CHECK_LIB(avahi-common, avahi_strerror,[have_avahi_strerror=yes])
6381     LIBS="$save_LIBS"
6382
6383     if test x"$have_avahi_client_new" != x"yes" -o \
6384        x"$have_avahi_strerror" != x"yes" ; then
6385         have_avahi_support=no
6386     fi
6387
6388     if test x"$have_avahi_support" = x"yes"; then
6389         AC_SUBST(AVAHI_LIBS, "-lavahi-client -lavahi-common")
6390         AC_DEFINE(WITH_AVAHI_SUPPORT, 1,
6391                 [Whether to enable avahi support])
6392         AC_SUBST(AVAHI_OBJ, "lib/avahi.o smbd/avahi_register.o")
6393     else
6394         if test x"$enable_avahi" = x"yes"; then
6395             AC_MSG_ERROR(avahi support not available)
6396         fi
6397     fi
6398 fi
6399
6400
6401 #################################################
6402 # Set pthread stuff
6403
6404 PTHREAD_CFLAGS=error
6405 PTHREAD_LDFLAGS=error
6406
6407 # If it's error, then the user didn't 
6408 # define it.
6409 if test "x$PTHREAD_LDFLAGS" = xerror; then
6410   AC_CHECK_LIB(pthread, pthread_attr_init, [
6411              PTHREAD_CFLAGS="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
6412              PTHREAD_LDFLAGS="-lpthread" ])
6413 fi
6414
6415 if test "x$PTHREAD_LDFLAGS" = xerror; then
6416   AC_CHECK_LIB(pthreads, pthread_attr_init, [
6417              PTHREAD_CFLAGS="-D_THREAD_SAFE"
6418              PTHREAD_LDFLAGS="-lpthreads" ])
6419 fi
6420
6421 if test "x$PTHREAD_LDFLAGS" = xerror; then
6422    AC_CHECK_LIB(c_r, pthread_attr_init, [
6423                 PTHREAD_CFLAGS="-D_THREAD_SAFE -pthread"
6424                 PTHREAD_LDFLAGS="-pthread" ])
6425 fi
6426
6427 if test "x$PTHREAD_LDFLAGS" = xerror; then
6428    AC_CHECK_FUNC(pthread_attr_init, [
6429                  PTHREAD_CFLAGS="-D_REENTRANT"
6430                  PTHREAD_LDFLAGS="-lpthread" ])
6431 fi
6432
6433 # especially for HP-UX, where the AC_CHECK_FUNC macro fails to test for
6434 # pthread_attr_init. On pthread_mutex_lock it works there...
6435 if test "x$PTHREAD_LDFLAGS" = xerror; then
6436    AC_CHECK_LIB(pthread, pthread_mutex_lock, [
6437                 PTHREAD_CFLAGS="-D_REENTRANT"
6438                 PTHREAD_LDFLAGS="-lpthread" ])
6439 fi
6440
6441 AC_SUBST(PTHREAD_CFLAGS)
6442 AC_SUBST(PTHREAD_LDFLAGS)
6443
6444 samba_cv_HAVE_PTHREAD=no
6445 if test x"$PTHREAD_CFLAGS" != xerror -a x"$PTHREAD_LDFLAGS" != xerror; then
6446         samba_cv_HAVE_PTHREAD=yes
6447         # now check for pthread.h with pthread-correct CFLAGS and LDFLAGS:
6448         ac_save_CFLAGS=$CFLAGS
6449         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6450         ac_save_LDFLAGS=$LDFLAGS
6451         LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
6452         AC_CHECK_HEADERS(pthread.h)
6453         CFLAGS=$ac_save_CFLAGS
6454         LDFLAGS=$ac_save_LDFLAGS
6455         AC_DEFINE(HAVE_PTHREAD, 1, [Do we have pthreads around?])
6456 fi
6457
6458 #################################################
6459 # Check if user wants pthreadpool support
6460
6461 AC_ARG_ENABLE(pthreadpool,
6462 [AS_HELP_STRING([--enable-pthreadpool], [Enable pthreads pool helper support (default=no)])])
6463
6464 if test x"$enable_pthreadpool" = xyes -a x"$samba_cv_HAVE_PTHREAD" != x"yes"; then
6465         AC_MSG_ERROR([pthreadpool support cannot be enabled when pthread support was not found])
6466 fi
6467
6468 if test x"$enable_pthreadpool" = x"yes" -a x"$samba_cv_HAVE_PTHREAD" = x"yes"; then
6469     LIBS="$LIBS $PTHREAD_LDFLAGS"
6470     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6471     AC_DEFINE(WITH_PTHREADPOOL, 1, [Whether to include pthreadpool helpers])
6472     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool.o")
6473 fi
6474
6475 #################################################
6476 # Check to see if we should use the included iniparser
6477
6478 AC_ARG_WITH(included-iniparser,
6479 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6480 [
6481   case "$withval" in
6482         yes)
6483                 INCLUDED_INIPARSER=yes
6484                 ;;
6485         no)
6486                 INCLUDED_INIPARSER=no
6487                 ;;
6488   esac ],
6489 )
6490 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6491     AC_CHECK_LIB(iniparser, iniparser_load,
6492                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6493 fi
6494
6495 AC_MSG_CHECKING(whether to use included iniparser)
6496 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6497     AC_MSG_RESULT(yes)
6498     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6499         INIPARSERLIBS=""
6500     FLAGS1="$FLAGS1 -I\$(srcdir)/../lib/iniparser/src"
6501 else
6502     AC_MSG_RESULT(no)
6503         BUILD_INIPARSER=""
6504     INIPARSERLIBS="-liniparser"
6505 fi
6506 AC_SUBST(BUILD_INIPARSER)
6507 AC_SUBST(INIPARSERLIBS)
6508 AC_SUBST(FLAGS1)
6509
6510 ###################################################
6511 # Check for different/missing (set|get|end)netgrent prototypes
6512 CFLAGS_SAVE=$CFLAGS
6513 CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
6514 AC_CACHE_CHECK([for setnetgrent prototype],samba_cv_setnetgrent_prototype, [
6515     AC_TRY_COMPILE([#include<netdb.h>
6516                     #ifdef HAVE_NETGROUP_H
6517                     #include<netgroup.h>
6518                     #endif],[setnetgrent("foo")],
6519                     samba_cv_setnetgrent_prototype=yes, samba_cv_setnetgrent_prototype=no)])
6520 if test x"$samba_cv_setnetgrent_prototype" = x"yes"; then
6521     AC_DEFINE(HAVE_SETNETGRENT_PROTOTYPE, 1, [If setnetgrent prototype is defined])
6522 fi
6523 AC_CACHE_CHECK([for getnetgrent prototype],samba_cv_getnetgrent_prototype, [
6524     AC_TRY_COMPILE([#include<netdb.h>
6525                     #ifdef HAVE_NETGROUP_H
6526                     #include<netgroup.h>
6527                     #endif],[char *dom, *user,*host; getnetgrent(&dom,&user,&host)],
6528                     samba_cv_getnetgrent_prototype=yes, samba_cv_getnetgrent_prototype=no)])
6529 if test x"$samba_cv_getnetgrent_prototype" = x"yes"; then
6530     AC_DEFINE(HAVE_GETNETGRENT_PROTOTYPE, 1, [If getnetgrent prototype is defined])
6531 fi
6532 AC_CACHE_CHECK([for endnetgrent prototype],samba_cv_endnetgrent_prototype, [
6533     AC_TRY_COMPILE([#include<netdb.h>
6534                     #ifdef HAVE_NETGROUP_H
6535                     #include<netgroup.h>
6536                     #endif],[endnetgrent()],
6537                     samba_cv_endnetgrent_prototype=yes, samba_cv_endnetgrent_prototype=no)])
6538 if test x"$samba_cv_endnetgrent_prototype" = x"yes"; then
6539     AC_DEFINE(HAVE_ENDNETGRENT_PROTOTYPE, 1, [If endnetgrent prototype is defined])
6540 fi
6541
6542 CFLAGS=$CFLAGS_SAVE
6543
6544 # Checks for the vfs_fileid module
6545 # Start
6546 AC_CHECK_FUNC(getmntent)
6547
6548 AC_CHECK_HEADERS(sys/statfs.h)
6549
6550 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
6551 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6552              AC_TRY_RUN([
6553                 #include <sys/types.h>
6554                 #include <sys/statfs.h>
6555                 int main(void)
6556                 {
6557                         struct statfs fsd;
6558                         fsid_t fsid = fsd.f_fsid;
6559                         return statfs (".", &fsd);
6560                 }],
6561                 vfsfileid_cv_statfs=yes,
6562                 vfsfileid_cv_statfs=no,
6563                 vfsfileid_cv_statfs=cross)
6564 ])
6565 AC_MSG_RESULT($vfsfileid_cv_statfs)
6566
6567 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6568         x"$vfsfileid_cv_statfs" = x"yes"; then
6569         default_shared_modules="$default_shared_modules vfs_fileid"
6570 fi
6571 # End
6572 # Checks for the vfs_fileid module
6573
6574
6575 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6576 do
6577         eval MODULE_DEFAULT_$i=STATIC
6578 done
6579
6580 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6581 do
6582         dnl Fall back to static if we cannot build shared libraries
6583         eval MODULE_DEFAULT_$i=STATIC
6584
6585         if test $BLDSHARED = true; then
6586                 eval MODULE_DEFAULT_$i=SHARED
6587         fi
6588 done
6589
6590 dnl Always build these modules static
6591 MODULE_rpc_spoolss=STATIC
6592 MODULE_rpc_srvsvc=STATIC
6593 MODULE_idmap_tdb=STATIC
6594 MODULE_idmap_passdb=STATIC
6595 MODULE_idmap_nss=STATIC
6596
6597 MODULE_nss_info_template=STATIC
6598
6599 AC_ARG_WITH(static-modules,
6600 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6601 [ if test $withval; then
6602         for i in `echo $withval | sed -e 's/,/ /g'`
6603         do
6604                 eval MODULE_$i=STATIC
6605         done
6606 fi ])
6607
6608 AC_ARG_WITH(shared-modules,
6609 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6610 [ if test $withval; then
6611         for i in `echo $withval | sed -e 's/,/ /g'`
6612         do
6613                         eval MODULE_$i=SHARED
6614         done
6615 fi ])
6616
6617 if test x"$MODULE_DEFAULT_vfs_notify_fam" = xSTATIC -o \
6618                 x"$MODULE_vfs_notify_fam" = xSTATIC ; then
6619         SMBD_FAM_LIBS="$SMB_FAM_LIBS"
6620         AC_SUBST(SMBD_FAM_LIBS)
6621 fi
6622
6623 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
6624                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6625 SMB_MODULE(pdb_ads, passdb/pdb_ads.o \$(TLDAP_OBJ), "bin/ads.$SHLIBEXT", PDB)
6626 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6627 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6628 SMB_MODULE(pdb_wbc_sam, passdb/pdb_wbc_sam.o, "bin/wbc_sam.$SHLIBEXT", PDB)
6629 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6630
6631
6632 SMB_MODULE(rpc_lsarpc, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
6633 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
6634 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
6635 SMB_MODULE(rpc_dssetup, \$(RPC_DSSETUP_OBJ), "bin/librpc_dssetup.$SHLIBEXT", RPC)
6636 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6637 SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC)
6638 SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC)
6639 SMB_MODULE(rpc_netlogon, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6640 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6641 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc.$SHLIBEXT", RPC)
6642 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6643 SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC)
6644 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6645 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
6646 SMB_SUBSYSTEM(RPC,smbd/process.o)
6647
6648 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6649 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6650 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6651 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6652 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6653 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6654 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6655 SMB_MODULE(idmap_hash, \$(IDMAP_HASH_OBJ), "bin/hash.$SHLIBEXT", IDMAP)
6656 SMB_MODULE(idmap_adex, \$(IDMAP_ADEX_OBJ), "bin/adex.$SHLIBEXT", IDMAP)
6657 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6658
6659 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6660 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6661
6662 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6663 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6664 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6665 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6666 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6667
6668 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6669 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6670 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6671 SMB_MODULE(auth_wbc, \$(AUTH_WBC_OBJ), "bin/wbc.$SHLIBEXT", AUTH)
6672 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6673 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6674 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6675 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6676 SMB_MODULE(auth_netlogond, \$(AUTH_NETLOGOND_OBJ), "bin/netlogond.$SHLIBEXT", AUTH)
6677 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6678
6679 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6680 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6681 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6682 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6683 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6684 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6685 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6686 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6687 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6688 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6689 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6690 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6691 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6692 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6693 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6694 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6695 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6696 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6697 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6698 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6699 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6700 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6701 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6702 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6703 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6704 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6705 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6706 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6707 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6708 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6709 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6710 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6711 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6712 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6713 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6714 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6715 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6716 SMB_MODULE(vfs_acl_xattr, \$(VFS_ACL_XATTR_OBJ), "bin/acl_xattr.$SHLIBEXT", VFS)
6717 SMB_MODULE(vfs_acl_tdb, \$(VFS_ACL_TDB_OBJ), "bin/acl_tdb.$SHLIBEXT", VFS)
6718 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6719 SMB_MODULE(vfs_onefs, \$(VFS_ONEFS), "bin/onefs.$SHLIBEXT", VFS)
6720 SMB_MODULE(vfs_onefs_shadow_copy, \$(VFS_ONEFS_SHADOW_COPY), "bin/onefs_shadow_copy.$SHLIBEXT", VFS)
6721 SMB_MODULE(vfs_dirsort, \$(VFS_DIRSORT_OBJ), "bin/dirsort.$SHLIBEXT", VFS)
6722 SMB_MODULE(vfs_scannedonly, \$(VFS_SCANNEDONLY_OBJ), "bin/scannedonly.$SHLIBEXT", VFS)
6723 SMB_MODULE(vfs_crossrename, \$(VFS_CROSSRENAME_OBJ), "bin/crossrename.$SHLIBEXT", VFS)
6724 SMB_MODULE(vfs_linux_xfs_sgid, \$(VFS_LINUX_XFS_SGID_OBJ), "bin/linux_xfs_sgid.$SHLIBEXT", VFS)
6725
6726 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6727
6728 SMB_MODULE(perfcount_onefs, \$(PERFCOUNT_ONEFS), "bin/pc_onefs.$SHLIBEXT", PERFCOUNT)
6729 SMB_MODULE(perfcount_test, \$(PERFCOUNT_TEST), "bin/pc_test.$SHLIBEXT", PERFCOUNT)
6730 SMB_SUBSYSTEM(PERFCOUNT,smbd/perfcount.o)
6731
6732 SMB_MODULE(gpext_registry, libgpo/gpext/registry.o, "bin/registry.$SHLIBEXT", GPEXT)
6733 SMB_MODULE(gpext_scripts, libgpo/gpext/scripts.o, "bin/scripts.$SHLIBEXT", GPEXT)
6734 SMB_MODULE(gpext_security, libgpo/gpext/security.o, "bin/security.$SHLIBEXT", GPEXT)
6735 SMB_SUBSYSTEM(GPEXT, libgpo/gpext/gpext.o)
6736
6737 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6738
6739 #################################################
6740 # do extra things if we are running insure
6741
6742 if test "${ac_cv_prog_CC}" = "insure"; then
6743         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6744 fi
6745
6746 #################################################
6747 # If run from the build farm, enable NASTY hacks
6748 #################################################
6749 AC_MSG_CHECKING(whether to enable build farm hacks)
6750 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6751         AC_MSG_RESULT(yes)
6752         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6753 else
6754         AC_MSG_RESULT(no)
6755 fi
6756
6757 #################################################
6758 # check for bad librt/libpthread interactions
6759
6760 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6761     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6762     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6763     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6764
6765 SMB_IF_RTSIGNAL_BUG(
6766         [
6767             # Have RT_SIGNAL bug, need to check whether the problem will
6768             # affect anything we have configured.
6769
6770             rt_do_error=no
6771             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6772                 if test x"$rt_signal_lease_ok" = x"no" ; then
6773                     rt_do_error=yes
6774                 fi
6775             fi
6776
6777             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6778                 if test x"$rt_signal_notify_ok" = x"no" ; then
6779                     rt_do_error=yes
6780                 fi
6781             fi
6782
6783             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6784                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6785                 if test x"$rt_signal_aio_ok" = x"no" ; then
6786                     rt_do_error=yes
6787                 fi
6788             fi
6789
6790             if test x"$rt_do_error" = x"yes" ; then
6791                 SMB_IS_LIBPTHREAD_LINKED(
6792                     [
6793                         cat<<MSG
6794
6795 *** On this platforms, linking Samba against pthreads causes problems
6796 *** with the oplock and change notification mechanisms. You may be
6797 *** using pthreads as a side-effect of using the --with-aio-support
6798 *** or --with-profiling-data options. Please remove these and try again.
6799
6800 MSG
6801                     ],
6802                     [
6803                         cat<<MSG
6804
6805 *** On this platform, the oplock and change notification mechanisms do not
6806 *** appear to work. Please report this problem to samba-technical@samba.org
6807 *** and attach the config.log file from this directory.
6808
6809 MSG
6810                     ])
6811                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6812             fi
6813         ],
6814         [
6815             # no RT_SIGNAL bug, we are golden
6816             SMB_IS_LIBPTHREAD_LINKED(
6817                 [
6818                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6819                 ])
6820
6821         ],
6822         [
6823             # cross compiling, I hope you know what you are doing
6824             true
6825         ])
6826
6827 fi
6828
6829 AC_ARG_ENABLE(merged-build, 
6830 [AS_HELP_STRING([--enable-merged-build], [Build Samba 4 as well])], 
6831 [ enable_merged_build=$enableval ], [ enable_merged_build=auto ])
6832
6833 if test x"$enable_merged_build" = x"yes" -a \
6834         x"$merged_build_possible" = x"no" ; then
6835         AC_MSG_ERROR(Merged build required but not possible)
6836 fi
6837
6838 m4_include(../lib/zlib/zlib.m4)
6839
6840 if test x$enable_merged_build = xauto; then
6841
6842         AC_MSG_CHECKING([whether it would be possible to do a merged build])
6843         AC_MSG_RESULT([$merged_build_possible])
6844
6845         # Enable merged build automatically if possible, when in developer mode
6846         if test "x$developer" = xyes; then
6847                 enable_merged_build=$merged_build_possible
6848         fi
6849 fi
6850
6851 if test x$enable_merged_build = xyes; then
6852         MERGED_BUILD=1
6853         saved_USESHARED="$USESHARED"
6854         USESHARED="false"
6855         smbtorture4_path="bin/smbtorture4"
6856         smbtorture4_option="-t bin/smbtorture4"
6857         AC_SUBST(smbtorture4_path)
6858         AC_SUBST(smbtorture4_option)
6859         USESHARED="$saved_USESHARED"
6860         SMBTORTURE4="bin/smbtorture4"
6861         AC_SUBST(SMBTORTURE4)
6862 fi
6863
6864 AC_SUBST(ZLIB_LIBS)
6865 AC_SUBST(ZLIB_OBJS)
6866 AC_ZLIB([ZLIB_OBJS=""], [
6867         ZLIB_LIBS=""
6868         for o in adler32.o compress.o crc32.o gzio.o uncompr.o \
6869                      deflate.o trees.o zutil.o inflate.o infback.o \
6870                          inftrees.o inffast.o
6871         do
6872                 ZLIB_OBJS="$ZLIB_OBJS ../lib/zlib/$o"
6873         done
6874         CFLAGS="-I../lib/zlib $CFLAGS"
6875 ])
6876
6877 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
6878
6879 if test "x$enable_dmalloc" = xyes
6880 then
6881         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
6882         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
6883                   [Define to check invariants around some common functions])
6884         LIBS="$LIBS -ldmalloc"
6885 fi
6886
6887 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6888 LIB_REMOVE_USR_LIB(LDFLAGS)
6889 LIB_REMOVE_USR_LIB(LIBS)
6890
6891 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6892 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6893 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6894
6895 #################################################
6896 # Display summary of libraries detected
6897
6898 AC_MSG_RESULT([Using libraries:])
6899 AC_MSG_RESULT([    LIBS = $LIBS])
6900 if test x"$with_ads_support" != x"no"; then
6901     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6902 fi
6903 if test x"$with_ldap_support" != x"no"; then
6904     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6905 fi
6906 if test x"$with_dnsupdate_support" != x"no"; then
6907     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6908 fi
6909 if test x"$have_dnssd_support" != x"no"; then
6910     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6911 fi
6912 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6913
6914 #################################################
6915 # final configure stuff
6916
6917 AC_MSG_CHECKING([configure summary])
6918 AC_TRY_RUN([#include "${srcdir-.}/../tests/summary.c"],
6919            AC_MSG_RESULT(yes),
6920            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6921            AC_MSG_WARN([cannot run when cross-compiling]))
6922
6923 dnl Merge in developer cflags from now on
6924 AC_SUBST(DEVELOPER_CFLAGS)
6925 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes" -o x"$picky_developer" = x"yes"; then
6926     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
6927 fi
6928
6929 # Stuff the smbd-only libraries at the end of the smbd link
6930 # path (if we have them).
6931 SMBD_LIBS="$samba_dmapi_libs"
6932 AC_SUBST(SMBD_LIBS)
6933
6934 CFLAGS="${CFLAGS} \$(FLAGS)"
6935 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
6936
6937 # If we had to expand the includes, make tsure the output file is moved back
6938 AC_OUTPUT_COMMANDS([
6939 if test -f Makefile-noincludes -a ! -f Makefile -a ! -h Makefile ; then
6940         ln -s Makefile-noincludes Makefile
6941 fi
6942 ])
6943
6944 AC_OUTPUT(Makefile
6945           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
6946           lib/netapi/examples/Makefile
6947           lib/netapi/tests/Makefile
6948           pkgconfig/smbclient.pc
6949           pkgconfig/wbclient.pc
6950           pkgconfig/netapi.pc
6951           pkgconfig/smbsharemodes.pc
6952           ../examples/libsmbclient/Makefile.internal
6953           )
6954
6955 #################################################
6956 # Print very concise instructions on building/use
6957 if test "x$enable_dmalloc" = xyes
6958 then
6959         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6960         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
6961 fi