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