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