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