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