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