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