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