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