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