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