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