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