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