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