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