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