r9561: Check for alloca.h.
[ira/wip.git] / source3 / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.53 or above
4 AC_PREREQ(2.53)
5 AC_INIT(include/includes.h)
6 AC_CONFIG_HEADER(include/config.h)
7
8 AC_DISABLE_STATIC
9 AC_ENABLE_SHARED
10
11 SMB_VERSION_STRING=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_OFFICIAL_STRING' | cut -d '"' -f2`
12 echo "SAMBA VERSION: ${SMB_VERSION_STRING}"
13
14 SAMBA_VERSION_SVN_REVISION=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_SVN_REVISION' | cut -d ' ' -f3-`
15 if test -n "${SAMBA_VERSION_SVN_REVISION}";then
16         echo "BUILD REVISION: ${SAMBA_VERSION_SVN_REVISION}"
17 fi
18
19 #################################################
20 # Directory handling stuff to support both the
21 # legacy SAMBA directories and FHS compliant
22 # ones...
23 AC_PREFIX_DEFAULT(/usr/local/samba)
24
25 lockdir="\${VARDIR}/locks"
26 piddir="\${VARDIR}/locks"
27 mandir="\${prefix}/man"
28 logfilebase="\${VARDIR}"
29 privatedir="\${prefix}/private"
30 libdir="\${prefix}/lib"
31 configdir="\${LIBDIR}"
32 swatdir="\${prefix}/swat"
33
34 AC_ARG_WITH(fhs, 
35 [  --with-fhs              Use FHS-compliant paths (default=no)],
36 [ case "$withval" in
37   yes)
38     lockdir="\${VARDIR}/lib/samba"
39     piddir="\${VARDIR}/run"
40     mandir="\${prefix}/share/man"
41     logfilebase="\${VARDIR}/log/samba"
42     privatedir="\${CONFIGDIR}/private"
43     libdir="\${prefix}/lib/samba"
44     configdir="${sysconfdir}/samba"
45     swatdir="\${DATADIR}/samba/swat"
46     ;;
47   esac])
48
49 #################################################
50 # set private directory location
51 AC_ARG_WITH(privatedir,
52 [  --with-privatedir=DIR   Where to put smbpasswd ($ac_default_prefix/private)],
53 [ case "$withval" in
54   yes|no)
55   #
56   # Just in case anybody calls it without argument
57   #
58     AC_MSG_WARN([--with-privatedir called without argument - will use default])
59   ;;
60   * )
61     privatedir="$withval"
62     ;;
63   esac])
64
65 #################################################
66 # set lock directory location
67 AC_ARG_WITH(lockdir,
68 [  --with-lockdir=DIR      Where to put lock files ($ac_default_prefix/var/locks)],
69 [ case "$withval" in
70   yes|no)
71   #
72   # Just in case anybody calls it without argument
73   #
74     AC_MSG_WARN([--with-lockdir called without argument - will use default])
75   ;;
76   * )
77     lockdir="$withval"
78     ;;
79   esac])
80
81 #################################################
82 # set pid directory location
83 AC_ARG_WITH(piddir,
84 [  --with-piddir=DIR       Where to put pid files ($ac_default_prefix/var/locks)],
85 [ case "$withval" in
86   yes|no)
87   #
88   # Just in case anybody calls it without argument
89   #
90     AC_MSG_WARN([--with-piddir called without argument - will use default])
91   ;;
92   * )
93     piddir="$withval"
94     ;;
95   esac])
96
97 #################################################
98 # set SWAT directory location
99 AC_ARG_WITH(swatdir,
100 [  --with-swatdir=DIR      Where to put SWAT files ($ac_default_prefix/swat)],
101 [ case "$withval" in
102   yes|no)
103   #
104   # Just in case anybody does it
105   #
106     AC_MSG_WARN([--with-swatdir called without argument - will use default])
107   ;;
108   * )
109     swatdir="$withval"
110     ;;
111   esac])
112
113 #################################################
114 # set configuration directory location
115 AC_ARG_WITH(configdir,
116 [  --with-configdir=DIR    Where to put configuration files ($libdir)],
117 [ case "$withval" in
118   yes|no)
119   #
120   # Just in case anybody does it
121   #
122     AC_MSG_WARN([--with-configdir called without argument - will use default])
123   ;;
124   * )
125     configdir="$withval"
126     ;;
127   esac])
128
129 #################################################
130 # set log directory location
131 AC_ARG_WITH(logfilebase,
132 [  --with-logfilebase=DIR  Where to put log files ($VARDIR)],
133 [ case "$withval" in
134   yes|no)
135   #
136   # Just in case anybody does it
137   #
138     AC_MSG_WARN([--with-logfilebase called without argument - will use default])
139   ;;
140   * )
141     logfilebase="$withval"
142     ;;
143   esac])
144
145 #################################################
146 # set lib directory location
147 AC_ARG_WITH(libdir,
148 [  --with-libdir=DIR       Where to put libdir ($libdir)],
149 [ case "$withval" in
150   yes|no)
151   #
152   # Just in case anybody does it
153   #
154     AC_MSG_WARN([--with-libdir without argument - will use default])
155   ;;
156   * )
157     libdir="$withval"
158     ;;
159   esac])
160
161 #################################################
162 # set lib directory location
163 AC_ARG_WITH(mandir,
164 [  --with-mandir=DIR       Where to put man pages ($mandir)],
165 [ case "$withval" in
166   yes|no)
167   #
168   # Just in case anybody does it
169   #
170     AC_MSG_WARN([--with-mandir without argument - will use default])
171   ;;
172   * )
173     mandir="$withval"
174     ;;
175   esac])
176
177 AC_ARG_WITH(cfenc,
178 [  --with-cfenc=HEADERDIR  Use internal CoreFoundation encoding API
179                           for optimization (Mac OS X/Darwin only)],
180 [
181 # May be in source $withval/CoreFoundation/StringEncodings.subproj.
182 # Should have been in framework $withval/CoreFoundation.framework/Headers.
183 for d in \
184     $withval/CoreFoundation/StringEncodings.subproj \
185     $withval/StringEncodings.subproj \
186     $withval/CoreFoundation.framework/Headers \
187     $withval/Headers \
188     $withval
189 do
190     if test -r $d/CFStringEncodingConverter.h; then
191         ln -sfh $d include/CoreFoundation
192     fi
193 done
194 ])
195
196 AC_SUBST(configdir)
197 AC_SUBST(lockdir)
198 AC_SUBST(piddir)
199 AC_SUBST(logfilebase)
200 AC_SUBST(privatedir)
201 AC_SUBST(swatdir)
202 AC_SUBST(bindir)
203 AC_SUBST(sbindir)
204
205 dnl Unique-to-Samba variables we'll be playing with.
206 AC_SUBST(SHELL)
207 AC_SUBST(LDSHFLAGS)
208 AC_SUBST(SONAMEFLAG)
209 AC_SUBST(SHLD)
210 AC_SUBST(HOST_OS)
211 AC_SUBST(PICFLAGS)
212 AC_SUBST(PICSUFFIX)
213 AC_SUBST(libc_cv_fpie)
214 AC_SUBST(PIE_CFLAGS)
215 AC_SUBST(PIE_LDFLAGS)
216 AC_SUBST(SHLIBEXT)
217 AC_SUBST(INSTALLCLIENT)
218 AC_SUBST(INSTALLCLIENTCMD_SH)
219 AC_SUBST(INSTALLCLIENTCMD_A)
220 AC_SUBST(LIBSMBCLIENT_SHARED)
221 AC_SUBST(LIBSMBCLIENT)
222 AC_SUBST(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 alloca.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_DIR64,[
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 [DIR64 de;],
1637 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
1638 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1639     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
1640 fi
1641
1642 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
1643 AC_TRY_COMPILE([
1644 #if defined(HAVE_UNISTD_H)
1645 #include <unistd.h>
1646 #endif
1647 #include <sys/types.h>
1648 #include <dirent.h>],
1649 [struct dirent64 de;],
1650 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
1651 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1652     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
1653 fi
1654
1655 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
1656 AC_TRY_RUN([
1657 #if defined(HAVE_UNISTD_H)
1658 #include <unistd.h>
1659 #endif
1660 #include <sys/types.h>
1661 main() { dev_t dev; int i = major(dev); return 0; }],
1662 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
1663 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
1664     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
1665 fi
1666
1667 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
1668 AC_TRY_RUN([
1669 #if defined(HAVE_UNISTD_H)
1670 #include <unistd.h>
1671 #endif
1672 #include <sys/types.h>
1673 main() { dev_t dev; int i = minor(dev); return 0; }],
1674 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
1675 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
1676     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
1677 fi
1678
1679 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
1680 AC_TRY_RUN([
1681 #if defined(HAVE_UNISTD_H)
1682 #include <unistd.h>
1683 #endif
1684 #include <sys/types.h>
1685 main() { dev_t dev = makedev(1,2); return 0; }],
1686 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
1687 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
1688     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
1689 fi
1690
1691 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
1692 AC_TRY_RUN([#include <stdio.h>
1693 main() { char c; c=250; exit((c > 0)?0:1); }],
1694 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
1695 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
1696     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
1697 fi
1698
1699 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
1700 AC_TRY_COMPILE([#include <sys/types.h>
1701 #include <sys/socket.h>
1702 #include <netinet/in.h>],
1703 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
1704 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
1705 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
1706     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
1707 fi
1708
1709 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
1710 AC_TRY_COMPILE([#include <sys/types.h>
1711 #include <dirent.h>
1712 void seekdir(DIR *d, long loc) { return; }],[return 0;],
1713 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
1714 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
1715     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
1716 fi
1717
1718 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
1719 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
1720 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
1721 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
1722     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
1723 fi
1724
1725 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
1726 AC_TRY_RUN([
1727 #include <sys/time.h>
1728 #include <unistd.h>
1729 main() { struct timeval tv; exit(gettimeofday(&tv, NULL));}],
1730            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,samba_cv_HAVE_GETTIMEOFDAY_TZ=no,samba_cv_HAVE_GETTIMEOFDAY_TZ=cross)])
1731 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
1732     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday() is available])
1733 fi
1734
1735 AC_CACHE_CHECK([for va_copy],samba_cv_HAVE_VA_COPY,[
1736 AC_TRY_LINK([#include <stdarg.h>
1737 va_list ap1,ap2;], [va_copy(ap1,ap2);],
1738 samba_cv_HAVE_VA_COPY=yes,
1739 samba_cv_HAVE_VA_COPY=no)])
1740 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
1741     AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
1742 else
1743     AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE___VA_COPY,[
1744     AC_TRY_LINK([#include <stdarg.h>
1745     va_list ap1,ap2;], [__va_copy(ap1,ap2);],
1746     samba_cv_HAVE___VA_COPY=yes,
1747     samba_cv_HAVE___VA_COPY=no)])
1748     if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
1749         AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
1750     fi
1751 fi
1752
1753 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
1754 AC_TRY_RUN([
1755 #include <sys/types.h>
1756 #include <stdarg.h>
1757 void foo(const char *format, ...) { 
1758        va_list ap;
1759        int len;
1760        char buf[5];
1761
1762        va_start(ap, format);
1763        len = vsnprintf(buf, 0, format, ap);
1764        va_end(ap);
1765        if (len != 5) exit(1);
1766
1767        va_start(ap, format);
1768        len = vsnprintf(0, 0, format, ap);
1769        va_end(ap);
1770        if (len != 5) exit(1);
1771
1772        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
1773
1774        exit(0);
1775 }
1776 main() { foo("hello"); }
1777 ],
1778 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
1779 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
1780     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
1781 fi
1782
1783 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
1784 AC_TRY_RUN([#include <sys/types.h>
1785 #include <dirent.h>
1786 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
1787 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
1788 di->d_name[0] == 0) exit(0); exit(1);} ],
1789 samba_cv_HAVE_BROKEN_READDIR=yes,samba_cv_HAVE_BROKEN_READDIR=no,samba_cv_HAVE_BROKEN_READDIR=cross)])
1790 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
1791     AC_DEFINE(HAVE_BROKEN_READDIR,1,[Whether readdir() is broken])
1792 fi
1793
1794 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
1795 AC_TRY_COMPILE([#include <sys/types.h>
1796 #include <utime.h>],
1797 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
1798 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
1799 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
1800     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
1801 fi
1802
1803 ##############
1804 # Check utmp details, but only if our OS offers utmp.h
1805 if test x"$ac_cv_header_utmp_h" = x"yes"; then
1806 dnl  utmp and utmpx come in many flavours
1807 dnl  We need to check for many of them
1808 dnl  But we don't need to do each and every one, because our code uses
1809 dnl  mostly just the utmp (not utmpx) fields.
1810
1811 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
1812
1813 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
1814 AC_TRY_COMPILE([#include <sys/types.h>
1815 #include <utmp.h>],
1816 [struct utmp ut;  ut.ut_name[0] = 'a';],
1817 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
1818 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
1819     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
1820 fi 
1821
1822 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
1823 AC_TRY_COMPILE([#include <sys/types.h>
1824 #include <utmp.h>],
1825 [struct utmp ut;  ut.ut_user[0] = 'a';],
1826 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
1827 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
1828     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
1829 fi 
1830
1831 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
1832 AC_TRY_COMPILE([#include <sys/types.h>
1833 #include <utmp.h>],
1834 [struct utmp ut;  ut.ut_id[0] = 'a';],
1835 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
1836 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
1837     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
1838 fi 
1839
1840 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
1841 AC_TRY_COMPILE([#include <sys/types.h>
1842 #include <utmp.h>],
1843 [struct utmp ut;  ut.ut_host[0] = 'a';],
1844 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
1845 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
1846     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
1847 fi 
1848
1849 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
1850 AC_TRY_COMPILE([#include <sys/types.h>
1851 #include <utmp.h>],
1852 [struct utmp ut;  time_t t; ut.ut_time = t;],
1853 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
1854 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
1855     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
1856 fi 
1857
1858 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
1859 AC_TRY_COMPILE([#include <sys/types.h>
1860 #include <utmp.h>],
1861 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
1862 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
1863 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
1864     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
1865 fi 
1866
1867 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
1868 AC_TRY_COMPILE([#include <sys/types.h>
1869 #include <utmp.h>],
1870 [struct utmp ut;  ut.ut_type = 0;],
1871 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
1872 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
1873     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
1874 fi 
1875
1876 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
1877 AC_TRY_COMPILE([#include <sys/types.h>
1878 #include <utmp.h>],
1879 [struct utmp ut;  ut.ut_pid = 0;],
1880 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
1881 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
1882     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
1883 fi 
1884
1885 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
1886 AC_TRY_COMPILE([#include <sys/types.h>
1887 #include <utmp.h>],
1888 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
1889 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
1890 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
1891     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
1892 fi 
1893
1894 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
1895 AC_TRY_COMPILE([#include <sys/types.h>
1896 #include <utmp.h>],
1897 [struct utmp ut;  ut.ut_addr = 0;],
1898 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
1899 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
1900     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
1901 fi 
1902
1903 if test x$ac_cv_func_pututline = xyes ; then
1904   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
1905   AC_TRY_COMPILE([#include <sys/types.h>
1906 #include <utmp.h>],
1907   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
1908   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
1909   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
1910       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
1911   fi
1912 fi
1913
1914 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
1915 AC_TRY_COMPILE([#include <sys/types.h>
1916 #include <utmpx.h>],
1917 [struct utmpx ux;  ux.ut_syslen = 0;],
1918 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
1919 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
1920     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
1921 fi 
1922
1923 fi
1924 # end utmp details
1925
1926
1927 ICONV_LOCATION=standard
1928 LOOK_DIRS="/usr /usr/local /sw /opt"
1929 AC_ARG_WITH(libiconv,
1930 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
1931 [
1932   if test "$withval" = "no" ; then
1933     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
1934   else
1935      if test "$withval" != "yes" ; then
1936         ICONV_PATH_SPEC=yes
1937         LOOK_DIRS="$withval"
1938      fi
1939   fi
1940 ])
1941
1942 for i in $LOOK_DIRS ; do
1943     save_LIBS=$LIBS
1944     save_LDFLAGS=$LDFLAGS
1945     save_CPPFLAGS=$CPPFLAGS
1946     ICONV_FOUND="no"
1947     unset libext
1948     CPPFLAGS="$CPPFLAGS -I$i/include"
1949 dnl This is here to handle -withval stuff for --with-libiconv
1950 dnl Perhaps we should always add a -L
1951
1952 dnl Check lib and lib32 library variants to cater for IRIX ABI-specific
1953 dnl installation paths. This gets a little tricky since we might have iconv
1954 dnl in both libiconv and in libc. In this case the jm_ICONV test will always
1955 dnl succeed when the header is found. To counter this, make sure the 
1956 dnl library directory is there and check the ABI directory first (which
1957 dnl should be harmless on other systems.
1958 dnl For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
1959     for l in "lib32" "lib" "lib/hpux32"; do
1960         if test -d "$i/$l" ; then
1961                 LDFLAGS="$save_LDFLAGS -L$i/$l"
1962                 LIBS=
1963                 export LDFLAGS LIBS CPPFLAGS
1964 dnl Try to find iconv(3)
1965                 jm_ICONV($i/$l)
1966                 if test x"$ICONV_FOUND" = "xyes" ; then
1967                     libext="$l"
1968                     break;
1969                 fi
1970         fi
1971     done
1972
1973     if test x"$ICONV_FOUND" = "xyes" ; then
1974         LDFLAGS=$save_LDFLAGS
1975         LIB_ADD_DIR(LDFLAGS, "$i/$libext")
1976         CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
1977         LIBS="$save_LIBS"
1978         ICONV_LOCATION=$i
1979         export LDFLAGS LIBS CPPFLAGS
1980 dnl Now, check for a working iconv ... we want to do it here because
1981 dnl there might be a working iconv further down the list of LOOK_DIRS
1982
1983         ############
1984         # check for iconv in libc
1985         ic_save_LIBS="$LIBS"
1986         if test x"$ICONV_PATH_SPEC" = "xyes" ; then
1987            LIBS="$LIBS -L$ICONV_LOCATION/$libext"
1988         fi
1989         if test x"$jm_cv_lib_iconv" != x; then
1990            LIBS="$LIBS -l$jm_cv_lib_iconv"
1991         fi
1992 dnl        AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[
1993         default_dos_charset=no
1994         default_display_charset=no
1995         default_unix_charset=no
1996
1997         # check for default dos charset name
1998         for j in CP850 IBM850 ; do
1999             rjs_CHARSET($j)
2000             if test x"$ICONV_CHARSET" = x"$j"; then
2001                 default_dos_charset="\"$j\""
2002                 break
2003             fi
2004         done
2005         # check for default display charset name
2006         for j in ASCII 646 ; do
2007             rjs_CHARSET($j)
2008             if test x"$ICONV_CHARSET" = x"$j"; then
2009                 default_display_charset="\"$j\""
2010                 break
2011             fi
2012         done
2013         # check for default unix charset name
2014         for j in UTF-8 UTF8 ; do
2015             rjs_CHARSET($j)
2016             if test x"$ICONV_CHARSET" = x"$j"; then
2017                 default_unix_charset="\"$j\""
2018                 break
2019             fi
2020         done
2021         
2022         if test "$default_dos_charset" != "no" -a \
2023                 "$default_dos_charset" != "cross" -a \
2024                 "$default_display_charset" != "no" -a \ 
2025                 "$default_display_charset" != "cross" -a \
2026                 "$default_unix_charset" != "no" -a \
2027                 "$default_unix_charset" != "cross"
2028         then
2029                 samba_cv_HAVE_NATIVE_ICONV=yes
2030         else if test "$default_dos_charset" = "cross" -o \
2031                      "$default_display_charset" = "cross" -o \
2032                      "$default_unix_charset" = "cross"
2033         then
2034                 samba_cv_HAVE_NATIVE_ICONV=cross
2035         else
2036                 samba_cv_HAVE_NATIVE_ICONV=no
2037         fi
2038         fi
2039 dnl ])
2040
2041         LIBS="$ic_save_LIBS"
2042         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
2043            CPPFLAGS=$save_CPPFLAGS
2044            LDFLAGS=$save_LDFLAGS
2045            LIBS=$save_LIBS
2046            if test x"$jm_cv_lib_iconv" != x; then
2047               LIBS="$LIBS -l$jm_cv_lib_iconv"
2048            fi
2049            dnl Add the flags we need to CPPFLAGS and LDFLAGS
2050            CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2051            LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2052            export CPPFLAGS
2053            AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2054            AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2055            AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2056            AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2057            break
2058         fi
2059 dnl We didn't find a working iconv, so keep going
2060     fi
2061 dnl We only need to clean these up here for the next pass through the loop
2062     CPPFLAGS=$save_CPPFLAGS
2063     LDFLAGS=$save_LDFLAGS
2064     LIBS=$save_LIBS
2065     export LDFLAGS LIBS CPPFLAGS
2066 done
2067 unset libext
2068
2069
2070 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2071     AC_MSG_WARN([Sufficient support for iconv function was not found. 
2072     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2073    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2074    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2075    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2076 fi
2077
2078
2079 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2080 AC_TRY_RUN([
2081 #include <sys/types.h>
2082 #include <fcntl.h>
2083 #ifndef F_GETLEASE
2084 #define F_GETLEASE      1025
2085 #endif
2086 main() {
2087        int fd = open("/dev/null", O_RDONLY);
2088        return fcntl(fd, F_GETLEASE, 0) == -1;
2089 }
2090 ],
2091 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2092 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2093     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2094 fi
2095
2096 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2097 AC_TRY_RUN([
2098 #include <sys/types.h>
2099 #include <fcntl.h>
2100 #include <signal.h>
2101 #ifndef F_NOTIFY
2102 #define F_NOTIFY 1026
2103 #endif
2104 main() {
2105         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2106 }
2107 ],
2108 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2109 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2110     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2111 fi
2112
2113 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2114 AC_TRY_RUN([
2115 #include <sys/types.h>
2116 #include <fcntl.h>
2117 #include <signal.h>
2118 #include <sys/file.h>
2119 #ifndef LOCK_MAND
2120 #define LOCK_MAND       32
2121 #define LOCK_READ       64
2122 #endif
2123 main() {
2124         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2125 }
2126 ],
2127 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2128 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2129     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2130 fi
2131
2132
2133
2134
2135 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2136 AC_TRY_COMPILE([#include <sys/types.h>
2137 #include <fcntl.h>],
2138 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2139 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2140 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2141     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2142 fi
2143
2144 AC_CACHE_CHECK([for irix specific capabilities],samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES,[
2145 AC_TRY_RUN([#include <sys/types.h>
2146 #include <sys/capability.h>
2147 main() {
2148  cap_t cap;
2149  if ((cap = cap_get_proc()) == NULL)
2150    exit(1);
2151  cap->cap_effective |= CAP_NETWORK_MGT;
2152  cap->cap_inheritable |= CAP_NETWORK_MGT;
2153  cap_set_proc(cap);
2154  exit(0);
2155 }
2156 ],
2157 samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=no,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross)])
2158 if test x"$samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES" = x"yes"; then
2159     AC_DEFINE(HAVE_IRIX_SPECIFIC_CAPABILITIES,1,[Whether IRIX specific capabilities are available])
2160 fi
2161
2162 #
2163 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2164 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2165 #
2166
2167 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2168 AC_TRY_COMPILE([#include <sys/types.h>
2169 #if defined(HAVE_RPC_RPC_H)
2170 #include <rpc/rpc.h>
2171 #endif],
2172 [int16 testvar;],
2173 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2174 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2175     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2176 fi
2177
2178 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2179 AC_TRY_COMPILE([#include <sys/types.h>
2180 #if defined(HAVE_RPC_RPC_H)
2181 #include <rpc/rpc.h>
2182 #endif],
2183 [uint16 testvar;],
2184 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2185 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2186     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2187 fi
2188
2189 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2190 AC_TRY_COMPILE([#include <sys/types.h>
2191 #if defined(HAVE_RPC_RPC_H)
2192 #include <rpc/rpc.h>
2193 #endif],
2194 [int32 testvar;],
2195 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2196 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2197     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2198 fi
2199
2200 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2201 AC_TRY_COMPILE([#include <sys/types.h>
2202 #if defined(HAVE_RPC_RPC_H)
2203 #include <rpc/rpc.h>
2204 #endif],
2205 [uint32 testvar;],
2206 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2207 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2208     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2209 fi
2210
2211 dnl
2212 dnl Some systems (SCO) have a problem including
2213 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2214 dnl as a #define in <prot.h> and as part of an enum
2215 dnl in <rpc/rpc.h>.
2216 dnl
2217
2218 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2219 AC_TRY_COMPILE([#include <sys/types.h>
2220 #ifdef HAVE_SYS_SECURITY_H
2221 #include <sys/security.h>
2222 #include <prot.h>
2223 #endif  /* HAVE_SYS_SECURITY_H */
2224 #if defined(HAVE_RPC_RPC_H)
2225 #include <rpc/rpc.h>
2226 #endif],
2227 [int testvar;],
2228 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2229 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2230     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2231 fi
2232
2233 AC_MSG_CHECKING([for test routines])
2234 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2235            AC_MSG_RESULT(yes),
2236            AC_MSG_ERROR([cant find test code. Aborting config]),
2237            AC_MSG_WARN([cannot run when cross-compiling]))
2238
2239 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2240 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2241            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2242 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2243     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2244 fi
2245
2246 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
2247 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
2248            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
2249            samba_cv_HAVE_WORKING_AF_LOCAL=no,
2250            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
2251 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
2252 then
2253     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
2254 fi
2255
2256 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2257 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2258            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2259 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2260     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2261 fi
2262
2263 AC_CACHE_CHECK([whether getpass should be replaced],samba_cv_REPLACE_GETPASS,[
2264 SAVE_CPPFLAGS="$CPPFLAGS"
2265 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt"
2266 AC_TRY_COMPILE([
2267 #define REPLACE_GETPASS 1
2268 #define NO_PROTO_H 1
2269 #define NO_CONFIG_H 1
2270 #define main dont_declare_main
2271 #include "${srcdir-.}/lib/getsmbpass.c"
2272 #undef main
2273 ],[],samba_cv_REPLACE_GETPASS=yes,samba_cv_REPLACE_GETPASS=no)
2274 CPPFLAGS="$SAVE_CPPFLAGS"
2275 ])
2276 if test x"$samba_cv_REPLACE_GETPASS" = x"yes"; then
2277         AC_DEFINE(REPLACE_GETPASS,1,[Whether getpass should be replaced])
2278 fi
2279
2280 AC_CACHE_CHECK([for broken inet_ntoa],samba_cv_REPLACE_INET_NTOA,[
2281 AC_TRY_RUN([
2282 #include <stdio.h>
2283 #include <sys/types.h>
2284 #include <netinet/in.h>
2285 #ifdef HAVE_ARPA_INET_H
2286 #include <arpa/inet.h>
2287 #endif
2288 main() { struct in_addr ip; ip.s_addr = 0x12345678;
2289 if (strcmp(inet_ntoa(ip),"18.52.86.120") &&
2290     strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } 
2291 exit(1);}],
2292            samba_cv_REPLACE_INET_NTOA=yes,samba_cv_REPLACE_INET_NTOA=no,samba_cv_REPLACE_INET_NTOA=cross)])
2293 if test x"$samba_cv_REPLACE_INET_NTOA" = x"yes"; then
2294     AC_DEFINE(REPLACE_INET_NTOA,1,[Whether inet_ntoa should be replaced])
2295 fi
2296
2297 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
2298 AC_TRY_RUN([#include <stdlib.h>
2299 #include <sys/types.h>
2300 #include <sys/stat.h>
2301 #include <unistd.h>
2302 main() { 
2303   struct stat st;
2304   char tpl[20]="/tmp/test.XXXXXX"; 
2305   int fd = mkstemp(tpl); 
2306   if (fd == -1) exit(1);
2307   unlink(tpl);
2308   if (fstat(fd, &st) != 0) exit(1);
2309   if ((st.st_mode & 0777) != 0600) exit(1);
2310   exit(0);
2311 }],
2312 samba_cv_HAVE_SECURE_MKSTEMP=yes,
2313 samba_cv_HAVE_SECURE_MKSTEMP=no,
2314 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
2315 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
2316     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
2317 fi
2318
2319 AC_CACHE_CHECK([for sysconf(_SC_NGROUPS_MAX)],samba_cv_SYSCONF_SC_NGROUPS_MAX,[
2320 AC_TRY_RUN([#include <unistd.h>
2321 main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); }],
2322 samba_cv_SYSCONF_SC_NGROUPS_MAX=yes,samba_cv_SYSCONF_SC_NGROUPS_MAX=no,samba_cv_SYSCONF_SC_NGROUPS_MAX=cross)])
2323 if test x"$samba_cv_SYSCONF_SC_NGROUPS_MAX" = x"yes"; then
2324     AC_DEFINE(SYSCONF_SC_NGROUPS_MAX,1,[Whether sysconf(_SC_NGROUPS_MAX) is available])
2325 fi
2326
2327 AC_CACHE_CHECK([for sysconf(_SC_NPROC_ONLN)],samba_cv_SYSCONF_SC_NPROC_ONLN,[
2328 AC_TRY_RUN([#include <unistd.h>
2329 main() { exit(sysconf(_SC_NPROC_ONLN) == -1 ? 1 : 0); }],
2330 samba_cv_SYSCONF_SC_NPROC_ONLN=yes,samba_cv_SYSCONF_SC_NPROC_ONLN=no,samba_cv_SYSCONF_SC_NPROC_ONLN=cross)])
2331 if test x"$samba_cv_SYSCONF_SC_NPROC_ONLN" = x"yes"; then
2332     AC_DEFINE(SYSCONF_SC_NPROC_ONLN,1,[Whether sysconf(_SC_NPROC_ONLN) is available])
2333 fi
2334
2335 AC_CACHE_CHECK([for root],samba_cv_HAVE_ROOT,[
2336 AC_TRY_RUN([main() { exit(getuid() != 0); }],
2337            samba_cv_HAVE_ROOT=yes,samba_cv_HAVE_ROOT=no,samba_cv_HAVE_ROOT=cross)])
2338 if test x"$samba_cv_HAVE_ROOT" = x"yes"; then
2339     AC_DEFINE(HAVE_ROOT,1,[Whether current user is root])
2340 else
2341     AC_MSG_WARN(running as non-root will disable some tests)
2342 fi
2343
2344 ##################
2345 # look for a method of finding the list of network interfaces
2346 iface=no;
2347 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
2348 AC_TRY_RUN([
2349 #define HAVE_IFACE_AIX 1
2350 #define AUTOCONF_TEST 1
2351 #include "confdefs.h"
2352 #include "${srcdir-.}/lib/interfaces.c"],
2353            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
2354 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
2355     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
2356 fi
2357
2358 if test $iface = no; then
2359 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
2360 AC_TRY_RUN([
2361 #define HAVE_IFACE_IFCONF 1
2362 #define AUTOCONF_TEST 1
2363 #include "confdefs.h"
2364 #include "${srcdir-.}/lib/interfaces.c"],
2365            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
2366 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
2367     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
2368 fi
2369 fi
2370
2371 if test $iface = no; then
2372 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
2373 AC_TRY_RUN([
2374 #define HAVE_IFACE_IFREQ 1
2375 #define AUTOCONF_TEST 1
2376 #include "confdefs.h"
2377 #include "${srcdir-.}/lib/interfaces.c"],
2378            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
2379 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
2380     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
2381 fi
2382 fi
2383
2384
2385 ################################################
2386 # look for a method of setting the effective uid
2387 seteuid=no;
2388 if test $seteuid = no; then
2389 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2390 AC_TRY_RUN([
2391 #define AUTOCONF_TEST 1
2392 #define USE_SETRESUID 1
2393 #include "confdefs.h"
2394 #include "${srcdir-.}/lib/util_sec.c"],
2395            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2396 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2397     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2398 fi
2399 fi
2400
2401
2402 if test $seteuid = no; then
2403 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2404 AC_TRY_RUN([
2405 #define AUTOCONF_TEST 1
2406 #define USE_SETREUID 1
2407 #include "confdefs.h"
2408 #include "${srcdir-.}/lib/util_sec.c"],
2409            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2410 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2411     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2412 fi
2413 fi
2414
2415 if test $seteuid = no; then
2416 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2417 AC_TRY_RUN([
2418 #define AUTOCONF_TEST 1
2419 #define USE_SETEUID 1
2420 #include "confdefs.h"
2421 #include "${srcdir-.}/lib/util_sec.c"],
2422            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2423 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2424     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2425 fi
2426 fi
2427
2428 if test $seteuid = no; then
2429 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2430 AC_TRY_RUN([
2431 #define AUTOCONF_TEST 1
2432 #define USE_SETUIDX 1
2433 #include "confdefs.h"
2434 #include "${srcdir-.}/lib/util_sec.c"],
2435            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2436 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2437     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2438 fi
2439 fi
2440
2441
2442 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
2443 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
2444            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
2445 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
2446     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
2447 fi
2448
2449 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2450 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2451            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2452 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2453     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2454 fi
2455
2456 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2457 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2458            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2459 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2460     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2461
2462 else
2463
2464 dnl
2465 dnl Don't check for 64 bit fcntl locking if we know that the
2466 dnl glibc2.1 broken check has succeeded.
2467 dnl 
2468
2469   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2470   AC_TRY_RUN([
2471 #if defined(HAVE_UNISTD_H)
2472 #include <unistd.h>
2473 #endif
2474 #include <stdio.h>
2475 #include <stdlib.h>
2476
2477 #ifdef HAVE_FCNTL_H
2478 #include <fcntl.h>
2479 #endif
2480
2481 #ifdef HAVE_SYS_FCNTL_H
2482 #include <sys/fcntl.h>
2483 #endif
2484 main() { struct flock64 fl64;
2485 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2486 exit(0);
2487 #else
2488 exit(1);
2489 #endif
2490 }],
2491        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2492
2493   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2494       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2495   fi
2496 fi
2497
2498 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2499 AC_TRY_COMPILE([#include <sys/types.h>
2500 #include <sys/stat.h>
2501 #include <unistd.h>],
2502 [struct stat st;  st.st_blocks = 0;],
2503 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2504 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2505     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2506 fi 
2507
2508 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2509 AC_TRY_COMPILE([#include <sys/types.h>
2510 #include <sys/stat.h>
2511 #include <unistd.h>],
2512 [struct stat st;  st.st_blksize = 0;],
2513 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2514 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2515     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2516 fi
2517
2518 case "$host_os" in
2519 *linux*)
2520 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
2521 AC_TRY_COMPILE([
2522 #ifdef HAVE_SYS_VFS_H
2523 #include <sys/vfs.h>
2524 #endif
2525 #ifdef HAVE_SYS_CAPABILITY_H
2526 #include <sys/capability.h>
2527 #endif
2528 ],[int i;],
2529    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
2530 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
2531    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
2532 fi
2533 ;;
2534 esac
2535
2536 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2537 AC_TRY_COMPILE([
2538 #include <sys/types.h>
2539 #include <sys/acl.h>
2540 #if defined(HAVE_RPCSVC_NIS_H)
2541 #include <rpcsvc/nis.h>
2542 #endif],
2543 [int i;],
2544 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2545 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2546         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2547 fi
2548
2549 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
2550 AC_TRY_RUN([
2551 #include <stdio.h>
2552 #include <limits.h>
2553 main() {
2554         char *newpath = realpath("/tmp", NULL);
2555         exit ((newpath != NULL) ? 0 : 1);
2556 }
2557 ],
2558 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
2559 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
2560     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
2561 fi
2562
2563 #################################################
2564 # check for smbwrapper support
2565 AC_MSG_CHECKING(whether to use smbwrapper)
2566 AC_ARG_WITH(smbwrapper,
2567 [  --with-smbwrapper       Include SMB wrapper support (default=no) ],
2568 [ case "$withval" in
2569   yes)
2570     AC_MSG_RESULT(yes)
2571     AC_DEFINE(WITH_SMBWRAPPER,1,[Whether to include smbwrapper support])
2572         WRAPPROG="bin/smbsh\$(EXEEXT)"
2573         WRAP="bin/smbwrapper.$SHLIBEXT"
2574         WRAP_OBJS="\$(SMBW_OBJ1) \$(SMBWRAPPER_OBJ1)"
2575         WRAP_INC="-I\$(srcdir)/smbwrapper"
2576
2577 # Conditions under which smbwrapper should not be built.
2578
2579         if test x$PICFLAGS = x; then
2580            echo No support for PIC code - disabling smbwrapper and smbsh
2581            WRAPPROG=""
2582            WRAP=""
2583            WRAP_OBJS=""
2584            WRAP_INC=""
2585         elif test x$ac_cv_func_syscall = xno; then
2586            AC_MSG_RESULT([No syscall() -- disabling smbwrapper and smbsh])
2587            WRAPPROG=""
2588            WRAP=""
2589            WRAP_OBJS=""
2590            WRAP_INC=""
2591         fi
2592         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WRAPPROG $WRAP"
2593         SMBWRAPPER="$WRAPPROG $WRAP"
2594         SMBWRAP_OBJS="$WRAP_OBJS"
2595         SMBWRAP_INC="$WRAP_INC"
2596     ;;
2597   *)
2598     AC_MSG_RESULT(no)
2599     ;;
2600   esac ],
2601   AC_MSG_RESULT(no)
2602 )
2603
2604 #################################################
2605 # check for AFS clear-text auth support
2606 samba_cv_WITH_AFS=no
2607 AC_MSG_CHECKING(whether to use AFS clear-text auth)
2608 AC_ARG_WITH(afs,
2609 [  --with-afs              Include AFS clear-text auth support (default=no) ],
2610 [ case "$withval" in
2611   yes|auto)
2612     AC_MSG_RESULT($withval)
2613     samba_cv_WITH_AFS=$withval
2614     ;;
2615   *)
2616     AC_MSG_RESULT(no)
2617     ;;
2618   esac ],
2619   AC_MSG_RESULT(no)
2620 )
2621
2622 ####################################################
2623 # check for Linux-specific AFS fake-kaserver support
2624 samba_cv_WITH_FAKE_KASERVER=no
2625 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2626 AC_ARG_WITH(fake-kaserver,
2627 [  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
2628 [ case "$withval" in
2629   yes|auto)
2630     AC_MSG_RESULT($withval)
2631     samba_cv_WITH_FAKE_KASERVER=$withval
2632     ;;
2633   *)
2634     AC_MSG_RESULT(no)
2635     ;;
2636   esac ],
2637   AC_MSG_RESULT(no)
2638 )
2639
2640 #################################################
2641 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
2642 if test x"$samba_cv_WITH_AFS" != x"no" ||
2643    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
2644
2645     # see if this box has the afs-headers in /usr/include/afs
2646     AC_MSG_CHECKING(for /usr/include/afs)
2647     if test -d /usr/include/afs; then
2648           CFLAGS="$CFLAGS -I/usr/include/afs"
2649           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
2650           AC_MSG_RESULT(yes)
2651     else
2652       AC_MSG_RESULT(no)
2653     fi
2654    
2655     # check for afs.h
2656     have_afs_headers=no
2657     AC_CHECK_HEADERS(afs.h afs/afs.h)
2658     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
2659         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
2660            test x"$samba_cv_WITH_AFS" = x"auto"; then
2661                 AC_MSG_WARN([AFS cannot be supported without afs.h])
2662         else
2663                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
2664         fi
2665     else
2666         have_afs_headers=yes
2667     fi
2668 fi
2669
2670 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
2671     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
2672 fi
2673
2674 #################################################
2675 # check whether to compile AFS/NT ACL mapping module
2676 samba_cv_WITH_VFS_AFSACL=no
2677 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2678 AC_ARG_WITH(vfs-afsacl,
2679 [  --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no) ],
2680 [ case "$withval" in
2681   yes|auto)
2682     AC_MSG_RESULT($withval)
2683     samba_cv_WITH_VFS_AFSACL=yes
2684     ;;
2685   *)
2686     AC_MSG_RESULT(no)
2687     ;;
2688   esac ],
2689   AC_MSG_RESULT(no)
2690 )
2691
2692 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
2693    default_shared_modules="$default_shared_modules vfs_afsacl"
2694 fi
2695         
2696 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
2697     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
2698 fi
2699
2700 #################################################
2701 # check for the DFS clear-text auth system
2702 AC_MSG_CHECKING(whether to use DFS clear-text auth)
2703 AC_ARG_WITH(dfs,
2704 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
2705 [ case "$withval" in
2706   yes)
2707     AC_MSG_RESULT(yes)
2708     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
2709     ;;
2710   *)
2711     AC_MSG_RESULT(no)
2712     ;;
2713   esac ],
2714   AC_MSG_RESULT(no)
2715 )
2716
2717 ########################################################
2718 # Compile with LDAP support?
2719
2720 with_ldap_support=auto
2721 AC_MSG_CHECKING([for LDAP support])
2722
2723 AC_ARG_WITH(ldap,
2724 [  --with-ldap             LDAP support (default yes)],
2725 [ case "$withval" in
2726     yes|no)
2727         with_ldap_support=$withval
2728         ;;
2729   esac ])
2730
2731 AC_MSG_RESULT($with_ldap_support)
2732
2733 SMBLDAP=""
2734 AC_SUBST(SMBLDAP)
2735 SMBLDAPUTIL=""
2736 AC_SUBST(SMBLDAPUTIL)
2737 if test x"$with_ldap_support" != x"no"; then
2738
2739   ##################################################################
2740   # first test for ldap.h and lber.h
2741   # (ldap.h is required for this test)
2742   AC_CHECK_HEADERS(ldap.h lber.h)
2743   
2744   if test x"$ac_cv_header_ldap_h" != x"yes"; then
2745         if test x"$with_ldap_support" = x"yes"; then
2746          AC_MSG_ERROR(ldap.h is needed for LDAP support)
2747         else
2748          AC_MSG_WARN(ldap.h is needed for LDAP support)
2749         fi
2750         
2751         with_ldap_support=no
2752   fi
2753 fi
2754
2755 if test x"$with_ldap_support" != x"no"; then
2756   ac_save_LIBS=$LIBS
2757
2758   ##################################################################
2759   # we might need the lber lib on some systems. To avoid link errors
2760   # this test must be before the libldap test
2761   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
2762
2763   ########################################################
2764   # now see if we can find the ldap libs in standard paths
2765   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
2766
2767   AC_CHECK_FUNC_EXT(ldap_domain2hostlist,$LDAP_LIBS)
2768   
2769   ########################################################
2770   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
2771   # Check found in pam_ldap 145.
2772   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
2773
2774   LIBS="$LIBS $LDAP_LIBS"
2775   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
2776     AC_TRY_COMPILE([
2777         #include <lber.h>
2778         #include <ldap.h>], 
2779         [ldap_set_rebind_proc(0, 0, 0);], 
2780         [smb_ldap_cv_ldap_set_rebind_proc=3], 
2781         [smb_ldap_cv_ldap_set_rebind_proc=2]
2782     ) 
2783   ])
2784   
2785   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
2786
2787   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS) 
2788   
2789   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes" -a x"$ac_cv_func_ext_ldap_domain2hostlist" = x"yes"; then
2790     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
2791     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
2792     SMBLDAP="lib/smbldap.o"
2793     SMBLDAPUTIL="lib/smbldap_util.o"
2794     with_ldap_support=yes
2795     AC_MSG_CHECKING(whether LDAP support is used)
2796     AC_MSG_RESULT(yes)
2797   else
2798     if test x"$with_ldap_support" = x"yes"; then
2799         AC_MSG_ERROR(libldap is needed for LDAP support)
2800     else
2801         AC_MSG_WARN(libldap is needed for LDAP support)
2802     fi
2803     
2804     LDAP_LIBS=""
2805     with_ldap_support=no
2806   fi
2807   LIBS=$ac_save_LIBS
2808 fi
2809
2810
2811 #################################################
2812 # active directory support
2813
2814 with_ads_support=auto
2815 AC_MSG_CHECKING([for Active Directory and krb5 support])
2816
2817 AC_ARG_WITH(ads,
2818 [  --with-ads              Active Directory support (default auto)],
2819 [ case "$withval" in
2820     yes|no)
2821         with_ads_support="$withval"
2822         ;;
2823   esac ])
2824
2825 AC_MSG_RESULT($with_ads_support)
2826
2827 FOUND_KRB5=no
2828 KRB5_LIBS=""
2829
2830 if test x"$with_ldap_support" != x"yes"; then
2831     if test x"$with_ads_support" = x"yes"; then
2832         AC_MSG_ERROR(Active Directory Support requires LDAP support)
2833     elif test x"$with_ads_support" != x"no"; then
2834         AC_MSG_WARN(Active Directory Support requires LDAP support)
2835     fi
2836     with_ads_support=no
2837 fi
2838
2839 if test x"$with_ads_support" != x"no"; then
2840
2841   # Do no harm to the values of CFLAGS and LIBS while testing for
2842   # Kerberos support.
2843  
2844   if test x$FOUND_KRB5 = x"no"; then
2845     #################################################
2846     # check for location of Kerberos 5 install
2847     AC_MSG_CHECKING(for kerberos 5 install path)
2848     AC_ARG_WITH(krb5,
2849     [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
2850     [ case "$withval" in
2851       no)
2852         AC_MSG_RESULT(no krb5-path given)
2853         ;;
2854       yes)
2855         AC_MSG_RESULT(/usr)
2856         FOUND_KRB5=yes
2857         ;;
2858       *)
2859         AC_MSG_RESULT($withval)
2860         KRB5_CFLAGS="-I$withval/include"
2861         KRB5_CPPFLAGS="-I$withval/include"
2862         KRB5_LDFLAGS="-L$withval/lib"
2863         FOUND_KRB5=yes
2864         if test -x "$withval/bin/krb5-config"; then
2865                 KRB5CONFIG=$withval/bin/krb5-config
2866         fi
2867         ;;
2868       esac ],
2869       AC_MSG_RESULT(no krb5-path given)
2870     )
2871   fi
2872
2873   #################################################
2874   # check for krb5-config from recent MIT and Heimdal kerberos 5
2875   AC_PATH_PROG(KRB5CONFIG, krb5-config)
2876   AC_MSG_CHECKING(for working krb5-config)
2877   if test -x "$KRB5CONFIG"; then
2878     ac_save_CFLAGS=$CFLAGS
2879     CFLAGS="";export CFLAGS
2880     ac_save_LDFLAGS=$LDFLAGS
2881     LDFLAGS="";export LDFLAGS
2882     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
2883     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
2884     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`" 
2885     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
2886     CFLAGS=$ac_save_CFLAGS;export CFLAGS
2887     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
2888     FOUND_KRB5=yes
2889     AC_MSG_RESULT(yes)
2890   else
2891     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
2892   fi
2893  
2894   if test x$FOUND_KRB5 = x"no"; then
2895     #################################################
2896     # see if this box has the SuSE location for the heimdal krb implementation
2897     AC_MSG_CHECKING(for /usr/include/heimdal)
2898     if test -d /usr/include/heimdal; then
2899       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
2900           KRB5_CFLAGS="-I/usr/include/heimdal"
2901           KRB5_CPPFLAGS="-I/usr/include/heimdal"
2902           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
2903           AC_MSG_RESULT(yes)
2904       else
2905           KRB5_CFLAGS="-I/usr/include/heimdal"
2906           KRB5_CPPFLAGS="-I/usr/include/heimdal"
2907           AC_MSG_RESULT(yes)
2908       fi
2909     else
2910       AC_MSG_RESULT(no)
2911     fi
2912   fi
2913
2914   if test x$FOUND_KRB5 = x"no"; then
2915     #################################################
2916     # see if this box has the RedHat location for kerberos
2917     AC_MSG_CHECKING(for /usr/kerberos)
2918     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
2919       KRB5_LDFLAGS="-L/usr/kerberos/lib"
2920       KRB5_CFLAGS="-I/usr/kerberos/include"
2921       KRB5_CPPFLAGS="-I/usr/kerberos/include"
2922       AC_MSG_RESULT(yes)
2923     else
2924       AC_MSG_RESULT(no)
2925     fi
2926   fi
2927
2928   ac_save_CFLAGS=$CFLAGS
2929   ac_save_CPPFLAGS=$CPPFLAGS
2930   ac_save_LDFLAGS=$LDFLAGS
2931
2932   CFLAGS="$KRB5_CFLAGS $CFLAGS"
2933   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
2934   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
2935
2936   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
2937
2938   # now check for krb5.h. Some systems have the libraries without the headers!
2939   # note that this check is done here to allow for different kerberos
2940   # include paths
2941   AC_CHECK_HEADERS(krb5.h)
2942
2943   if test x"$ac_cv_header_krb5_h" = x"no"; then
2944
2945     # Give a warning if AD support was not explicitly requested,
2946     # i.e with_ads_support = auto, otherwise die with an error.
2947
2948     if test x"$with_ads_support" = x"yes"; then
2949       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
2950     else
2951       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
2952     fi
2953
2954     # Turn off AD support and restore CFLAGS and LIBS variables
2955
2956     with_ads_support="no"
2957     
2958     CFLAGS=$ac_save_CFLAGS
2959     CPPFLAGS=$ac_save_CPPFLAGS
2960     LDFLAGS=$ac_save_LDFLAGS
2961   fi
2962 fi
2963
2964 # Now we have determined whether we really want ADS support
2965
2966 if test x"$with_ads_support" != x"no"; then
2967   ac_save_LIBS=$LIBS
2968
2969   # now check for gssapi headers.  This is also done here to allow for
2970   # different kerberos include paths
2971   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
2972
2973   ##################################################################
2974   # we might need the k5crypto and com_err libraries on some systems
2975   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
2976   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
2977
2978   # Heimdal checks.
2979   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
2980   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
2981   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
2982
2983   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
2984   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],
2985                                 AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available]))
2986
2987   ########################################################
2988   # now see if we can find the krb5 libs in standard paths
2989   # or as specified above
2990   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
2991   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
2992
2993   ########################################################
2994   # now see if we can find the gssapi libs in standard paths
2995   AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],
2996             AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available]))
2997
2998   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
2999   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3000   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3001   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3002   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3003   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS) 
3004   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3005   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS) 
3006   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3007   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS) 
3008   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3009   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS) 
3010   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS) 
3011   AC_CHECK_FUNC_EXT(krb5_free_ktypes, $KRB5_LIBS)
3012   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3013   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3014   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3015   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3016   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3017   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3018   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3019   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3020
3021   LIBS="$KRB5_LIBS $LIBS"
3022   
3023   AC_CACHE_CHECK([for krb5_encrypt_block type],
3024                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3025     AC_TRY_COMPILE([#include <krb5.h>],
3026       [krb5_encrypt_block block;],
3027       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3028       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3029
3030   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3031     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3032                [Whether the type krb5_encrypt_block exists])
3033   fi
3034
3035   AC_CACHE_CHECK([for addrtype in krb5_address],
3036                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3037     AC_TRY_COMPILE([#include <krb5.h>],
3038       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3039       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3040       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3041
3042   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3043     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3044                [Whether the krb5_address struct has a addrtype property])
3045   fi
3046
3047   AC_CACHE_CHECK([for addr_type in krb5_address],
3048                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3049     AC_TRY_COMPILE([#include <krb5.h>],
3050       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3051       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3052       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3053
3054   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3055     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3056               [Whether the krb5_address struct has a addr_type property])
3057   fi
3058
3059   AC_CACHE_CHECK([for enc_part2 in krb5_ticket], 
3060                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3061                  [AC_TRY_COMPILE([#include <krb5.h>],
3062     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3063     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3064
3065   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3066     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3067               [Whether the krb5_ticket struct has a enc_part2 property])
3068   fi
3069
3070   AC_CACHE_CHECK([for keyblock in krb5_creds],
3071                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3072     AC_TRY_COMPILE([#include <krb5.h>],
3073       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3074       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3075       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3076
3077   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3078     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3079               [Whether the krb5_creds struct has a keyblock property])
3080   fi
3081
3082   AC_CACHE_CHECK([for session in krb5_creds],
3083                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3084     AC_TRY_COMPILE([#include <krb5.h>],
3085       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3086       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3087       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3088
3089   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3090     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3091               [Whether the krb5_creds struct has a session property])
3092   fi
3093
3094   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3095                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3096     AC_TRY_COMPILE([#include <krb5.h>],
3097       [krb5_keyblock key; key.keyvalue.data = NULL;],
3098       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3099       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3100
3101   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3102     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3103               [Whether the krb5_keyblock struct has a keyvalue property])
3104   fi
3105
3106   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3107                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3108     AC_TRY_COMPILE([#include <krb5.h>],
3109       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3110       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3111       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3112   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3113                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3114     AC_TRY_COMPILE([#include <krb5.h>],
3115       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3116       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3117       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3118 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3119 # w.r.t. arcfour and windows, so we must not enable it here
3120   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3121           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3122     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3123               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3124   fi
3125
3126   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3127                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3128     AC_TRY_COMPILE([#include <krb5.h>],
3129       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3130       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3131       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3132
3133   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3134     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3135               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3136   fi
3137
3138   AC_CACHE_CHECK([for KV5M_KEYTAB],
3139                  samba_cv_HAVE_KV5M_KEYTAB,[
3140     AC_TRY_COMPILE([#include <krb5.h>],
3141       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3142       samba_cv_HAVE_KV5M_KEYTAB=yes,
3143       samba_cv_HAVE_KV5M_KEYTAB=no)])
3144
3145   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3146       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3147              [Whether the KV5M_KEYTAB option is available])
3148   fi
3149
3150   AC_CACHE_CHECK([for the krb5_princ_component macro],
3151                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3152     AC_TRY_LINK([#include <krb5.h>],
3153       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3154       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3155       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3156
3157   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3158     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3159                [Whether krb5_princ_component is available])
3160   fi
3161
3162   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3163                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3164     AC_TRY_COMPILE([#include <krb5.h>],
3165       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3166       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3167       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3168
3169   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3170     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3171               [Whether krb5_keytab_entry has key member])
3172   fi
3173
3174   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3175                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3176     AC_TRY_COMPILE([#include <krb5.h>],
3177       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3178       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3179       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3180
3181   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3182     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3183               [Whether krb5_keytab_entry has keyblock member])
3184   fi
3185
3186   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" = x"yes"; then
3187     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3188     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3189     AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
3190     AC_MSG_RESULT(yes)
3191   else
3192     if test x"$with_ads_support" = x"yes"; then
3193         AC_MSG_ERROR(libkrb5 is needed for Active Directory support)
3194     else
3195         AC_MSG_WARN(libkrb5 is needed for Active Directory support)
3196     fi
3197     KRB5_LIBS=""
3198     with_ads_support=no 
3199   fi
3200
3201   AC_CACHE_CHECK([for WRFILE: keytab support],
3202                 samba_cv_HAVE_WRFILE_KEYTAB,[
3203     AC_TRY_RUN([
3204 #include<krb5.h>
3205   main()
3206   {
3207     krb5_context context;
3208     krb5_keytab keytab;
3209
3210     krb5_init_context(&context);
3211     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3212   }],
3213   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3214   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3215
3216   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3217       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3218                [Whether the WRFILE:-keytab is supported])
3219   fi
3220
3221   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3222                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3223     AC_TRY_COMPILE([#include <krb5.h>],
3224     [
3225     krb5_context context;
3226     krb5_principal principal;
3227     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3228     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3229     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3230
3231   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3232     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3233               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3234   fi
3235
3236 LIBS="$ac_save_LIBS"
3237 fi
3238
3239 ########################################################
3240 # Compile experimental passdb backends?
3241 # (pdb_xml, pdb_mysql, pdb_pgsql)
3242 AC_MSG_CHECKING(whether to build experimental passdb libraries)
3243 AC_ARG_WITH(expsam,
3244 [  --with-expsam=<list>    Include experimental passdb libraries (default=no)]
3245 [                          Valid choices include (comma separated list): ]
3246 [                              xml, mysql & pgsql],
3247 [ expsam_pdb_modules=`echo "$withval" | sed 's/,/ /g'`
3248   if test "z$expsam_pdb_modules" = "zyes"; then
3249     expsam_pdb_modules="xml mysql pgsql"
3250   fi
3251   AC_MSG_RESULT($expsam_pdb_modules)
3252   for i in $expsam_pdb_modules
3253   do 
3254     case "$i" in
3255     xml|all|yes)
3256       ## pdb_xml
3257           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])])
3258       CFLAGS="$CFLAGS $XML_CFLAGS"
3259       ;;
3260     mysql|all|yes)
3261       ## pdb_mysql
3262           AM_PATH_MYSQL([default_shared_modules="$default_shared_modules pdb_mysql"],[AC_MSG_ERROR([Can't find MySQL libraries while MySQL support is requested])])
3263       CFLAGS="$CFLAGS $MYSQL_CFLAGS"
3264       ;;
3265      pgsql|all|yes)
3266       ## pdb_pgsql
3267       AM_PATH_PGSQL([default_shared_modules="$default_shared_modules pdb_pgsql"],[])
3268       CFLAGS="$CFLAGS $PGSQL_CFLAGS"
3269       ;;
3270     no)
3271       ;;
3272     *)
3273       echo "Unknown module name \"$i\"!  Exiting..."
3274       exit 1
3275       ;;
3276     esac
3277   done ],
3278   AC_MSG_RESULT(no)
3279 )
3280
3281 #################################################
3282 # check for automount support
3283 AC_MSG_CHECKING(whether to use automount)
3284 AC_ARG_WITH(automount,
3285 [  --with-automount        Include automount support (default=no)],
3286 [ case "$withval" in
3287   yes)
3288     AC_MSG_RESULT(yes)
3289     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
3290     ;;
3291   *)
3292     AC_MSG_RESULT(no)
3293     ;;
3294   esac ],
3295   AC_MSG_RESULT(no)
3296 )
3297
3298 #################################################
3299 # check for smbmount support
3300 AC_MSG_CHECKING(whether to use smbmount)
3301 AC_ARG_WITH(smbmount,
3302 [  --with-smbmount         Include smbmount (Linux only) support (default=no)],
3303 [ case "$withval" in
3304   yes)
3305         case "$host_os" in
3306         *linux*)
3307                 AC_MSG_RESULT(yes)
3308                 AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
3309                 EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbmount bin/smbmnt bin/smbumount"
3310                 ;;
3311         *)
3312                 AC_MSG_ERROR(not on a linux system!)
3313                 ;;
3314         esac
3315     ;;
3316   *)
3317     AC_MSG_RESULT(no)
3318     ;;
3319   esac ],
3320   AC_MSG_RESULT(no)
3321 )
3322
3323
3324
3325 #################################################
3326 # check for a PAM clear-text auth, accounts, password and session support
3327 with_pam_for_crypt=no
3328 AC_MSG_CHECKING(whether to use PAM)
3329 AC_ARG_WITH(pam,
3330 [  --with-pam              Include PAM support (default=no)],
3331 [ case "$withval" in
3332   yes)
3333     AC_MSG_RESULT(yes)
3334     if test x"$ac_cv_header_security_pam_appl_h" = x"no"; then
3335        if test x"$ac_cv_header_security_pam_modules_h" = x"no"; then
3336           if test x"$ac_cv_header_security__pam_macros_h" = x"no"; then
3337              AC_MSG_ERROR(--with-pam specified but no PAM headers found)
3338           fi
3339        fi
3340     fi
3341     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
3342     AUTH_LIBS="$AUTH_LIBS -lpam"
3343     with_pam_for_crypt=yes
3344     ;;
3345   *)
3346     AC_MSG_RESULT(no)
3347     ;;
3348   esac ],
3349   AC_MSG_RESULT(no)
3350 )
3351
3352 # we can't build a pam module if we don't have pam.
3353 AC_CHECK_LIB(pam, pam_get_data, [AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])])
3354
3355 #################################################
3356 # check for pam_smbpass support
3357 AC_MSG_CHECKING(whether to use pam_smbpass)
3358 AC_ARG_WITH(pam_smbpass,
3359 [  --with-pam_smbpass      Build PAM module for authenticating against passdb backends (default=no)],
3360 [ case "$withval" in
3361   yes)
3362     AC_MSG_RESULT(yes)
3363
3364        # Conditions under which pam_smbpass should not be built.
3365
3366        if test x$PICFLAGS = x; then
3367           AC_MSG_ERROR([No support for PIC code])
3368        elif test x"$ac_cv_header_security_pam_appl_h" = x"no"; then
3369           AC_MSG_ERROR([No security/pam_appl.h found])
3370        elif test x$ac_cv_lib_pam_pam_get_data = xno; then
3371           AC_MSG_ERROR([No libpam found])
3372        else
3373           AUTH_LIBS="$AUTH_LIBS -lpam"
3374           SHLIB_PROGS="$SHLIB_PROGS bin/pam_smbpass.$SHLIBEXT"
3375        fi
3376     ;;
3377   *)
3378     AC_MSG_RESULT(no)
3379     ;;
3380   esac ],
3381   AC_MSG_RESULT(no)
3382 )
3383
3384
3385 ###############################################
3386 # test for where we get crypt() from
3387 AC_SEARCH_LIBS(crypt, [crypt],
3388   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
3389   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
3390
3391 ##
3392 ## moved after the check for -lcrypt in order to
3393 ## ensure that the necessary libraries are included
3394 ## check checking for truncated salt.  Wrapped by the
3395 ## $with_pam_for_crypt variable as above   --jerry
3396 ##
3397 if test $with_pam_for_crypt = no; then
3398 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
3399 crypt_LIBS="$LIBS"
3400 LIBS="$AUTH_LIBS $LIBS"
3401 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
3402         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
3403 LIBS="$crypt_LIBS"])
3404 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
3405         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
3406 fi
3407 fi
3408
3409
3410 ########################################################################################
3411 ##
3412 ## TESTS FOR SAM BACKENDS.  KEEP THESE GROUPED TOGETHER
3413 ##
3414 ########################################################################################
3415
3416 #################################################
3417 # check for a LDAP password database configuration backwards compatibility
3418 AC_MSG_CHECKING(whether to use LDAP SAM 2.2 compatible configuration)
3419 AC_ARG_WITH(ldapsam,
3420 [  --with-ldapsam          Include LDAP SAM 2.2 compatible configuration (default=no)],
3421 [ case "$withval" in
3422   yes)
3423     AC_MSG_RESULT(yes)
3424     AC_DEFINE(WITH_LDAP_SAMCONFIG,1,[Whether to include 2.2 compatible LDAP SAM configuration])
3425     ;;
3426   *)
3427     AC_MSG_RESULT(no)
3428     ;;
3429   esac ],
3430   AC_MSG_RESULT(no)
3431 )
3432
3433 ########################################################################################
3434 ##
3435 ## END OF TESTS FOR SAM BACKENDS.  
3436 ##
3437 ########################################################################################
3438
3439 #################################################
3440 # check for a NISPLUS_HOME support 
3441 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
3442 AC_ARG_WITH(nisplus-home,
3443 [  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
3444 [ case "$withval" in
3445   yes)
3446     AC_MSG_RESULT(yes)
3447     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
3448     ;;
3449   *)
3450     AC_MSG_RESULT(no)
3451     ;;
3452   esac ],
3453   AC_MSG_RESULT(no)
3454 )
3455
3456 #################################################
3457 # check for syslog logging
3458 AC_MSG_CHECKING(whether to use syslog logging)
3459 AC_ARG_WITH(syslog,
3460 [  --with-syslog           Include experimental SYSLOG support (default=no)],
3461 [ case "$withval" in
3462   yes)
3463     AC_MSG_RESULT(yes)
3464     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
3465     ;;
3466   *)
3467     AC_MSG_RESULT(no)
3468     ;;
3469   esac ],
3470   AC_MSG_RESULT(no)
3471 )
3472
3473 #################################################
3474 # check for a shared memory profiling support
3475 AC_MSG_CHECKING(whether to use profiling)
3476 AC_ARG_WITH(profiling-data,
3477 [  --with-profiling-data   Include gathering source code profile information (default=no)],
3478 [ case "$withval" in
3479   yes)
3480     AC_MSG_RESULT(yes)
3481     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
3482     ;;
3483   *)
3484     AC_MSG_RESULT(no)
3485     ;;
3486   esac ],
3487   AC_MSG_RESULT(no)
3488 )
3489
3490
3491 #################################################
3492 # check for experimental disk-quotas support
3493
3494 samba_cv_WITH_QUOTAS=auto
3495 samba_cv_TRY_QUOTAS=no
3496 samba_cv_RUN_QUOTA_TESTS=auto
3497 samba_cv_WITH_SYS_QUOTAS=auto
3498 samba_cv_TRY_SYS_QUOTAS=no
3499 samba_cv_SYSQUOTA_FOUND=no;
3500
3501 AC_MSG_CHECKING(whether to try disk-quotas support)
3502 AC_ARG_WITH(quotas,
3503 [  --with-quotas           Include disk-quota support (default=no)],
3504 [ case "$withval" in
3505   yes)
3506     AC_MSG_RESULT(yes)
3507     samba_cv_WITH_QUOTAS=yes
3508     samba_cv_TRY_QUOTAS=yes
3509     samba_cv_RUN_QUOTA_TESTS=yes
3510     #set sys quotas to auto in this case
3511     samba_cv_TRY_SYS_QUOTAS=auto
3512     ;;
3513   auto)
3514     AC_MSG_RESULT(auto)
3515     samba_cv_WITH_QUOTAS=auto
3516     samba_cv_TRY_QUOTAS=auto
3517     samba_cv_RUN_QUOTA_TESTS=auto
3518     #set sys quotas to auto in this case
3519     samba_cv_TRY_SYS_QUOTAS=auto
3520     ;;
3521   no)
3522     AC_MSG_RESULT(no)
3523     samba_cv_WITH_QUOTAS=no
3524     samba_cv_TRY_QUOTAS=no
3525     samba_cv_RUN_QUOTA_TESTS=no
3526     ;;
3527   *)
3528     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
3529     ;;
3530   esac ],
3531   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
3532 )
3533
3534 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
3535 AC_ARG_WITH(sys-quotas,
3536 [  --with-sys-quotas       Include lib/sysquotas.c support (default=auto)],
3537 [ case "$withval" in
3538   yes)
3539     AC_MSG_RESULT(yes)
3540     samba_cv_WITH_SYS_QUOTAS=yes
3541     samba_cv_TRY_SYS_QUOTAS=yes
3542     samba_cv_RUN_QUOTA_TESTS=yes
3543     ;;
3544   auto)
3545     AC_MSG_RESULT(auto)
3546     samba_cv_WITH_SYS_QUOTAS=auto
3547     samba_cv_TRY_SYS_QUOTAS=auto
3548     samba_cv_RUN_QUOTA_TESTS=auto
3549     ;;
3550   no)
3551     AC_MSG_RESULT(no)
3552     samba_cv_WITH_SYS_QUOTAS=no
3553     samba_cv_TRY_SYS_QUOTAS=no
3554     ;;
3555   *)
3556     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
3557     ;;
3558   esac ],
3559   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
3560 )
3561
3562 if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
3563 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
3564   case "$host_os" in
3565         *linux*)
3566             AC_MSG_RESULT(yes)
3567             samba_cv_TRY_SYS_QUOTAS=yes
3568             samba_cv_RUN_QUOTA_TESTS=yes
3569             samba_cv_SYSQUOTA_FOUND=yes
3570             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
3571             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
3572             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
3573             samba_cv_found_xfs_header=yes
3574             ;;
3575         *)
3576             AC_MSG_RESULT(no)
3577             samba_cv_TRY_SYS_QUOTAS=no
3578             ;;
3579   esac
3580 fi
3581
3582 #############################################
3583 # only check for quota stuff if --with-quotas
3584 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
3585
3586 # some broken header files need this
3587 AC_CHECK_HEADER(asm/types.h,[
3588             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
3589             AC_ADD_INCLUDE(<asm/types.h>)
3590             ])
3591
3592 # For quotas on Veritas VxFS filesystems
3593 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
3594
3595 # For sys/quota.h and linux/quota.h
3596 AC_CHECK_HEADERS(sys/quota.h)
3597
3598 if test x"$samba_cv_found_xfs_header" != x"yes"; then
3599 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
3600 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
3601 AC_TRY_COMPILE([
3602 #include "confdefs.h"
3603 #ifdef HAVE_SYS_TYPES_H
3604 #include <sys/types.h>
3605 #endif
3606 #ifdef HAVE_ASM_TYPES_H
3607 #include <asm/types.h>
3608 #endif
3609 #include <sys/quota.h>
3610 ],[int i = Q_XGETQUOTA;],
3611 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
3612 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
3613         samba_cv_found_xfs_header=yes
3614 fi
3615 fi
3616
3617 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX 
3618 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
3619 AC_TRY_COMPILE([
3620 #include "confdefs.h"
3621 #ifdef HAVE_SYS_QUOTA_H
3622 #include <sys/quota.h>
3623 #endif
3624 ],[
3625 struct dqblk D;
3626 D.dqb_fsoftlimit = 0;],
3627 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
3628 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
3629         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
3630 fi
3631
3632 ##################
3633 # look for a working quota system
3634
3635 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
3636 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
3637 AC_TRY_RUN_STRICT([
3638 #define HAVE_QUOTACTL_4A 1
3639 #define AUTOCONF_TEST 1
3640 #include "confdefs.h"
3641 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3642            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
3643 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
3644     samba_cv_SYSQUOTA_FOUND=yes;
3645     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
3646     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
3647 fi
3648 fi
3649
3650 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
3651 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
3652 AC_TRY_RUN_STRICT([
3653 #define HAVE_QUOTACTL_4B 1
3654 #define AUTOCONF_TEST 1
3655 #include "confdefs.h"
3656 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3657            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
3658 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
3659     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
3660     samba_cv_SYSQUOTA_FOUND=yes;
3661     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
3662     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
3663 fi
3664 fi
3665
3666 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
3667 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
3668 AC_TRY_RUN_STRICT([
3669 #define HAVE_QUOTACTL_3 1
3670 #define AUTOCONF_TEST 1
3671 #include "confdefs.h"
3672 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3673            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
3674 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
3675     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
3676     samba_cv_SYSQUOTA_FOUND=yes;
3677     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
3678     samba_cv_sysquotas_file="lib/sysquotas_3.c"
3679 fi
3680 fi
3681
3682 #################################################
3683 # check for mntent.h and struct mntent
3684 AC_CHECK_HEADERS(mntent.h)
3685 #################################################
3686 # check for setmntent,getmntent,endmntent
3687 AC_CHECK_FUNCS(setmntent getmntent endmntent)
3688
3689 #################################################
3690 # check for devnm.h and struct mntent
3691 AC_CHECK_HEADERS(devnm.h)
3692 #################################################
3693 # check for devnm
3694 AC_CHECK_FUNCS(devnm)
3695
3696 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
3697     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
3698         # if --with-sys-quotas=yes then build it 
3699         # you have can use the get/set quota command smb.conf
3700         # options then
3701         samba_cv_SYSQUOTA_FOUND=auto
3702     fi
3703     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
3704         # if --with-sys-quotas=yes then build it 
3705         # you have can use the get/set quota command smb.conf
3706         # options then
3707         samba_cv_TRY_SYS_QUOTAS=auto
3708     fi
3709 fi
3710
3711 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
3712 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
3713 SAVE_CPPFLAGS="$CPPFLAGS"
3714 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I. -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/nsswitch"
3715 AC_TRY_COMPILE([
3716 #include "confdefs.h"
3717 #define NO_PROTO_H 1
3718 #define NO_CONFIG_H 1
3719 #define HAVE_SYS_QUOTAS 1
3720 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
3721 #include "${srcdir-.}/lib/sysquotas.c"
3722 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
3723 CPPFLAGS="$SAVE_CPPFLAGS"
3724 ])
3725 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
3726 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
3727     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then 
3728         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
3729         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
3730         samba_cv_WE_USE_SYS_QUOTAS=yes
3731         AC_MSG_RESULT(yes)
3732     else
3733         AC_MSG_RESULT(no)
3734     fi
3735 fi
3736 fi
3737
3738 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
3739 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
3740 SAVE_CPPFLAGS="$CPPFLAGS"
3741 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I. -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/nsswitch"
3742 AC_TRY_COMPILE([
3743 #include "confdefs.h"
3744 #define NO_PROTO_H 1
3745 #define NO_CONFIG_H 1
3746 #define HAVE_SYS_QUOTAS 1
3747 #define HAVE_XFS_QUOTAS 1
3748 #include "${srcdir-.}/lib/sysquotas_xfs.c"
3749 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
3750 CPPFLAGS="$SAVE_CPPFLAGS"
3751 ])
3752 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
3753     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
3754         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
3755     fi
3756 fi
3757 fi
3758
3759 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
3760 SAVE_CPPFLAGS="$CPPFLAGS"
3761 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I. -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/nsswitch"
3762 AC_TRY_COMPILE([
3763 #include "confdefs.h"
3764 #define NO_PROTO_H 1
3765 #define NO_CONFIG_H 1
3766 #include "${srcdir-.}/smbd/quotas.c"
3767 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
3768 CPPFLAGS="$SAVE_CPPFLAGS"
3769 ])
3770 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
3771 AC_MSG_CHECKING(whether to use the old quota support)
3772     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
3773       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
3774         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
3775         AC_MSG_RESULT(yes)
3776       else
3777         AC_MSG_RESULT(no)
3778       fi
3779     else
3780       AC_MSG_RESULT(no)
3781     fi
3782 fi
3783
3784 ####################
3785 # End of quota check samba_cv_RUN_QUOTA_TESTS
3786 fi
3787
3788 #################################################
3789 # check for experimental utmp accounting
3790
3791 AC_MSG_CHECKING(whether to support utmp accounting)
3792 WITH_UTMP=yes
3793 AC_ARG_WITH(utmp,
3794 [  --with-utmp             Include utmp accounting (default, if supported by OS)],
3795 [ case "$withval" in
3796   no)
3797                 WITH_UTMP=no
3798                 ;;
3799   *)
3800                 WITH_UTMP=yes
3801                 ;;
3802   esac ],
3803 )
3804
3805 # utmp requires utmp.h
3806 # Note similar check earlier, when checking utmp details.
3807
3808 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
3809         utmp_no_reason=", no utmp.h on $host_os"
3810         WITH_UTMP=no
3811 fi
3812
3813 # Display test results
3814
3815 if test x"$WITH_UTMP" = x"yes"; then
3816         AC_MSG_RESULT(yes)
3817         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
3818 else
3819         AC_MSG_RESULT(no$utmp_no_reason)
3820 fi
3821
3822 #################################################
3823 # should we build libsmbclient?
3824
3825 INSTALLCLIENTCMD_SH=:
3826 INSTALLCLIENTCMD_A=:
3827 INSTALLCLIENT=
3828 LIBSMBCLIENT_SHARED=
3829 LIBSMBCLIENT=
3830 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
3831 AC_ARG_WITH(libsmbclient,
3832 [  --with-libsmbclient     Build the libsmbclient shared library (default=yes if shared libs supported)],
3833 [ case "$withval" in
3834   no) 
3835      AC_MSG_RESULT(no)
3836      ;;
3837   *)
3838      if test $BLDSHARED = true; then
3839         INSTALLCLIENTCMD_SH="\$(INSTALLCMD)"
3840         ## build the static version of libsmbclient as well
3841         INSTALLCLIENTCMD_A="\$(INSTALLCMD)"
3842         LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
3843         LIBSMBCLIENT=libsmbclient
3844         AC_MSG_RESULT(yes)
3845      else
3846         enable_static=yes
3847         AC_MSG_RESULT(no shared library support -- will supply static library)
3848      fi
3849      if test $enable_static = yes; then
3850         INSTALLCLIENTCMD_A="\$(INSTALLCMD)"
3851         LIBSMBCLIENT=libsmbclient
3852      fi
3853      INSTALLCLIENT=installclientlib
3854      ;;
3855   esac ],
3856 [
3857 # if unspecified, default is to built it iff possible.
3858   if test $BLDSHARED = true; then
3859      INSTALLCLIENTCMD_SH="\$(INSTALLCMD)"
3860      LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
3861      LIBSMBCLIENT=libsmbclient
3862      AC_MSG_RESULT(yes)
3863    else
3864      enable_static=yes
3865      AC_MSG_RESULT(no shared library support -- will supply static library)
3866    fi
3867    if test $enable_static = yes; then
3868      INSTALLCLIENTCMD_A="\$(INSTALLCMD)"
3869      LIBSMBCLIENT=libsmbclient
3870   fi]
3871   INSTALLCLIENT=installclientlib
3872 )
3873
3874
3875 #################################################
3876 # these tests are taken from the GNU fileutils package
3877 AC_CHECKING(how to get filesystem space usage)
3878 space=no
3879
3880 # Test for statvfs64.
3881 if test $space = no; then
3882   # SVR4
3883   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
3884   [AC_TRY_RUN([
3885 #if defined(HAVE_UNISTD_H)
3886 #include <unistd.h>
3887 #endif
3888 #include <sys/types.h>
3889 #include <sys/statvfs.h>
3890   main ()
3891   {
3892     struct statvfs64 fsd;
3893     exit (statvfs64 (".", &fsd));
3894   }],
3895   fu_cv_sys_stat_statvfs64=yes,
3896   fu_cv_sys_stat_statvfs64=no,
3897   fu_cv_sys_stat_statvfs64=cross)])
3898   if test $fu_cv_sys_stat_statvfs64 = yes; then
3899     space=yes
3900     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
3901   fi
3902 fi
3903
3904 # Perform only the link test since it seems there are no variants of the
3905 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
3906 # because that got a false positive on SCO OSR5.  Adding the declaration
3907 # of a `struct statvfs' causes this test to fail (as it should) on such
3908 # systems.  That system is reported to work fine with STAT_STATFS4 which
3909 # is what it gets when this test fails.
3910 if test $space = no; then
3911   # SVR4
3912   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
3913                  [AC_TRY_LINK([#include <sys/types.h>
3914 #include <sys/statvfs.h>],
3915                               [struct statvfs fsd; statvfs (0, &fsd);],
3916                               fu_cv_sys_stat_statvfs=yes,
3917                               fu_cv_sys_stat_statvfs=no)])
3918   if test $fu_cv_sys_stat_statvfs = yes; then
3919     space=yes
3920     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
3921   fi
3922 fi
3923
3924 if test $space = no; then
3925   # DEC Alpha running OSF/1
3926   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
3927   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
3928   [AC_TRY_RUN([
3929 #include <sys/param.h>
3930 #include <sys/types.h>
3931 #include <sys/mount.h>
3932   main ()
3933   {
3934     struct statfs fsd;
3935     fsd.f_fsize = 0;
3936     exit (statfs (".", &fsd, sizeof (struct statfs)));
3937   }],
3938   fu_cv_sys_stat_statfs3_osf1=yes,
3939   fu_cv_sys_stat_statfs3_osf1=no,
3940   fu_cv_sys_stat_statfs3_osf1=no)])
3941   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
3942   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
3943     space=yes
3944     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
3945   fi
3946 fi
3947
3948 if test $space = no; then
3949 # AIX
3950   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
3951 member (AIX, 4.3BSD)])
3952   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
3953   [AC_TRY_RUN([
3954 #ifdef HAVE_SYS_PARAM_H
3955 #include <sys/param.h>
3956 #endif
3957 #ifdef HAVE_SYS_MOUNT_H
3958 #include <sys/mount.h>
3959 #endif
3960 #ifdef HAVE_SYS_VFS_H
3961 #include <sys/vfs.h>
3962 #endif
3963   main ()
3964   {
3965   struct statfs fsd;
3966   fsd.f_bsize = 0;
3967   exit (statfs (".", &fsd));
3968   }],
3969   fu_cv_sys_stat_statfs2_bsize=yes,
3970   fu_cv_sys_stat_statfs2_bsize=no,
3971   fu_cv_sys_stat_statfs2_bsize=no)])
3972   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
3973   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
3974     space=yes
3975     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
3976   fi
3977 fi
3978
3979 if test $space = no; then
3980 # SVR3
3981   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
3982   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
3983   [AC_TRY_RUN([#include <sys/types.h>
3984 #include <sys/statfs.h>
3985   main ()
3986   {
3987   struct statfs fsd;
3988   exit (statfs (".", &fsd, sizeof fsd, 0));
3989   }],
3990     fu_cv_sys_stat_statfs4=yes,
3991     fu_cv_sys_stat_statfs4=no,
3992     fu_cv_sys_stat_statfs4=no)])
3993   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
3994   if test $fu_cv_sys_stat_statfs4 = yes; then
3995     space=yes
3996     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
3997   fi
3998 fi
3999
4000 if test $space = no; then
4001 # 4.4BSD and NetBSD
4002   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
4003 member (4.4BSD and NetBSD)])
4004   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
4005   [AC_TRY_RUN([#include <sys/types.h>
4006 #ifdef HAVE_SYS_PARAM_H
4007 #include <sys/param.h>
4008 #endif
4009 #ifdef HAVE_SYS_MOUNT_H
4010 #include <sys/mount.h>
4011 #endif
4012   main ()
4013   {
4014   struct statfs fsd;
4015   fsd.f_fsize = 0;
4016   exit (statfs (".", &fsd));
4017   }],
4018   fu_cv_sys_stat_statfs2_fsize=yes,
4019   fu_cv_sys_stat_statfs2_fsize=no,
4020   fu_cv_sys_stat_statfs2_fsize=no)])
4021   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
4022   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
4023     space=yes
4024         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
4025   fi
4026 fi
4027
4028 if test $space = no; then
4029   # Ultrix
4030   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
4031   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
4032   [AC_TRY_RUN([#include <sys/types.h>
4033 #ifdef HAVE_SYS_PARAM_H
4034 #include <sys/param.h>
4035 #endif
4036 #ifdef HAVE_SYS_MOUNT_H
4037 #include <sys/mount.h>
4038 #endif
4039 #ifdef HAVE_SYS_FS_TYPES_H
4040 #include <sys/fs_types.h>
4041 #endif
4042   main ()
4043   {
4044   struct fs_data fsd;
4045   /* Ultrix's statfs returns 1 for success,
4046      0 for not mounted, -1 for failure.  */
4047   exit (statfs (".", &fsd) != 1);
4048   }],
4049   fu_cv_sys_stat_fs_data=yes,
4050   fu_cv_sys_stat_fs_data=no,
4051   fu_cv_sys_stat_fs_data=no)])
4052   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
4053   if test $fu_cv_sys_stat_fs_data = yes; then
4054     space=yes
4055     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
4056   fi
4057 fi
4058
4059 #
4060 # As a gating factor for large file support, in order to
4061 # use <4GB files we must have the following minimal support
4062 # available.
4063 # long long, and a 64 bit off_t or off64_t.
4064 # If we don't have all of these then disable large
4065 # file support.
4066 #
4067 AC_MSG_CHECKING([if large file support can be enabled])
4068 AC_TRY_COMPILE([
4069 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
4070 #include <sys/types.h>
4071 #else
4072 __COMPILE_ERROR_
4073 #endif
4074 ],
4075 [int i],
4076 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
4077 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
4078         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
4079 fi
4080 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
4081
4082 AC_ARG_WITH(spinlocks, 
4083 [  --with-spinlocks        Use spin locks instead of fcntl locks (default=no) ])
4084 if test "x$with_spinlocks" = "xyes"; then
4085     AC_DEFINE(USE_SPINLOCKS,1,[Whether to use spin locks instead of fcntl locks])
4086
4087     case "$host_cpu" in
4088         sparc)
4089             AC_DEFINE(SPARC_SPINLOCKS,1,[Whether to use sparc spinlocks])
4090             ;;
4091
4092         i386|i486|i586|i686)
4093             AC_DEFINE(INTEL_SPINLOCKS,1,[Whether to use intel spinlocks])
4094             ;;
4095
4096         mips)
4097             AC_DEFINE(MIPS_SPINLOCKS,1,[Whether to use mips spinlocks])
4098             ;;
4099
4100         powerpc)
4101             AC_DEFINE(POWERPC_SPINLOCKS,1,[Whether to use powerpc spinlocks])
4102             ;;
4103     esac
4104 fi
4105
4106 #################################################
4107 # check for ACL support
4108
4109 AC_MSG_CHECKING(whether to support ACLs)
4110 AC_ARG_WITH(acl-support,
4111 [  --with-acl-support      Include ACL support (default=no)],
4112 [ case "$withval" in
4113   yes)
4114
4115         case "$host_os" in
4116         *sysv5*)
4117                 AC_MSG_RESULT(Using UnixWare ACLs)
4118                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
4119                 ;;
4120         *solaris*)
4121                 AC_MSG_RESULT(Using solaris ACLs)
4122                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
4123                 ;;
4124         *hpux*)
4125                 AC_MSG_RESULT(Using HPUX ACLs)
4126                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
4127                 ;;
4128         *irix*)
4129                 AC_MSG_RESULT(Using IRIX ACLs)
4130                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
4131                 ;;
4132         *aix*)
4133                 AC_MSG_RESULT(Using AIX ACLs)
4134                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
4135                 ;;
4136         *osf*)
4137                 AC_MSG_RESULT(Using Tru64 ACLs)
4138                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
4139                 ACL_LIBS="$ACL_LIBS -lpacl"
4140                 ;;
4141         *freebsd[[5-9]]*)
4142                 AC_MSG_RESULT(Using FreeBSD posix ACLs)
4143                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether FreeBSD POSIX ACLs are available])
4144                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
4145                 ;;
4146         *linux*)
4147                 AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
4148                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
4149                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
4150                 acl_LIBS=$LIBS
4151                 LIBS="$LIBS -lacl"
4152                 AC_TRY_LINK([#include <sys/types.h>
4153 #include <sys/acl.h>],
4154 [ acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p);],
4155 samba_cv_HAVE_POSIX_ACLS=yes,samba_cv_HAVE_POSIX_ACLS=no)
4156                 LIBS=$acl_LIBS])
4157                         if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
4158                                 AC_MSG_RESULT(Using posix ACLs)
4159                                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
4160                                 AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
4161                                 acl_LIBS=$LIBS
4162                                 LIBS="$LIBS -lacl"
4163                                 AC_TRY_LINK([#include <sys/types.h>
4164 #include <sys/acl.h>],
4165 [ acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm);],
4166 samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_cv_HAVE_ACL_GET_PERM_NP=no)
4167                                 LIBS=$acl_LIBS])
4168                                 if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
4169                                         AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
4170                                 fi
4171                         fi
4172             ;;
4173          *)
4174                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
4175                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
4176                 acl_LIBS=$LIBS
4177                 LIBS="$LIBS -lacl"
4178                 AC_TRY_LINK([#include <sys/types.h>
4179 #include <sys/acl.h>],
4180 [ acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p);],
4181 samba_cv_HAVE_POSIX_ACLS=yes,samba_cv_HAVE_POSIX_ACLS=no)
4182                 LIBS=$acl_LIBS])
4183                         if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
4184                                 AC_MSG_RESULT(Using posix ACLs)
4185                                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
4186                                 AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
4187                                 acl_LIBS=$LIBS
4188                                 LIBS="$LIBS -lacl"
4189                                 AC_TRY_LINK([#include <sys/types.h>
4190 #include <sys/acl.h>],
4191 [ acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm);],
4192 samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_cv_HAVE_ACL_GET_PERM_NP=no)
4193                                 LIBS=$acl_LIBS])
4194                                 if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
4195                                         AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
4196                                 fi
4197                         fi
4198             ;;
4199         esac
4200         ;;
4201   *)
4202     AC_MSG_RESULT(no)
4203     AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
4204     ;;
4205   esac ],
4206   AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
4207   AC_MSG_RESULT(no)
4208 )
4209
4210 #################################################
4211 # check for AIO support
4212
4213 AC_MSG_CHECKING(whether to support asynchronous io)
4214 AC_ARG_WITH(aio-support,
4215 [  --with-aio-support      Include asynchronous io support (default=no)],
4216 [ case "$withval" in
4217   yes)
4218
4219         AC_MSG_RESULT(yes)
4220         case "$host_os" in
4221         *)
4222                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$ACL_LIBS -lrt"])
4223                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
4224                 aio_LIBS=$LIBS
4225                 LIBS="$LIBS -lrt"
4226                 AC_TRY_LINK([#include <sys/types.h>
4227 #include <aio.h>],
4228 [ struct aiocb a; return aio_read(&a);],
4229 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
4230                 LIBS=$aio_LIBS])
4231                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
4232                 aio_LIBS=$LIBS
4233                 LIBS="$LIBS -lrt"
4234                 AC_TRY_LINK([#include <sys/types.h>
4235 #include <aio.h>],
4236 [ struct aiocb64 a; return aio_read64(&a);],
4237 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
4238                 LIBS=$aio_LIBS])
4239                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
4240                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
4241                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
4242                         LIBS="$LIBS -lrt"
4243                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
4244                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
4245                         LIBS="$LIBS -lrt"
4246                 fi
4247
4248                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
4249                         AC_MSG_CHECKING(for aio_read)
4250                         AC_LINK_IFELSE([#include <aio.h>
4251 int main() { struct aiocb a; return aio_read(&a); }],
4252 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
4253 [AC_MSG_RESULT(no)])
4254
4255                         AC_MSG_CHECKING(for aio_write)
4256                         AC_LINK_IFELSE([#include <aio.h>
4257 int main() { struct aiocb a; return aio_write(&a); }],
4258 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
4259 [AC_MSG_RESULT(no)])
4260
4261                         AC_MSG_CHECKING(for aio_fsync)
4262                         AC_LINK_IFELSE([#include <aio.h>
4263 int main() { struct aiocb a; return aio_fsync(1, &a); }],
4264 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
4265 [AC_MSG_RESULT(no)])
4266
4267                         AC_MSG_CHECKING(for aio_return)
4268                         AC_LINK_IFELSE([#include <aio.h>
4269 int main() { struct aiocb a; return aio_return(&a); }],
4270 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
4271 [AC_MSG_RESULT(no)])
4272
4273                         AC_MSG_CHECKING(for aio_error)
4274                         AC_LINK_IFELSE([#include <aio.h>
4275 int main() { struct aiocb a; return aio_error(&a); }],
4276 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
4277 [AC_MSG_RESULT(no)])
4278
4279                         AC_MSG_CHECKING(for aio_cancel)
4280                         AC_LINK_IFELSE([#include <aio.h>
4281 int main() { struct aiocb a; return aio_cancel(1, &a); }],
4282 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
4283 [AC_MSG_RESULT(no)])
4284
4285                         AC_MSG_CHECKING(for aio_suspend)
4286                         AC_LINK_IFELSE([#include <aio.h>
4287 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
4288 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
4289 [AC_MSG_RESULT(no)])
4290                 fi
4291
4292                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
4293                         AC_MSG_CHECKING(for aio_read64)
4294                         AC_LINK_IFELSE([#include <aio.h>
4295 int main() { struct aiocb a; return aio_read64(&a); }],
4296 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
4297 [AC_MSG_RESULT(no)])
4298
4299                         AC_MSG_CHECKING(for aio_write64)
4300                         AC_LINK_IFELSE([#include <aio.h>
4301 int main() { struct aiocb a; return aio_write64(&a); }],
4302 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
4303 [AC_MSG_RESULT(no)])
4304
4305                         AC_MSG_CHECKING(for aio_fsync64)
4306                         AC_LINK_IFELSE([#include <aio.h>
4307 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
4308 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
4309 [AC_MSG_RESULT(no)])
4310
4311                         AC_MSG_CHECKING(for aio_return64)
4312                         AC_LINK_IFELSE([#include <aio.h>
4313 int main() { struct aiocb a; return aio_return64(&a); }],
4314 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
4315 [AC_MSG_RESULT(no)])
4316
4317                         AC_MSG_CHECKING(for aio_error64)
4318                         AC_LINK_IFELSE([#include <aio.h>
4319 int main() { struct aiocb a; return aio_error64(&a); }],
4320 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
4321 [AC_MSG_RESULT(no)])
4322
4323                         AC_MSG_CHECKING(for aio_cancel64)
4324                         AC_LINK_IFELSE([#include <aio.h>
4325 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
4326 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
4327 [AC_MSG_RESULT(no)])
4328
4329                         AC_MSG_CHECKING(for aio_suspend64)
4330                         AC_LINK_IFELSE([#include <aio.h>
4331 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
4332 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
4333 [AC_MSG_RESULT(no)])
4334                 fi
4335             ;;
4336         esac
4337         ;;
4338   *)
4339     AC_MSG_RESULT(no)
4340     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
4341     ;;
4342   esac ],
4343   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
4344   AC_MSG_RESULT(no)
4345 )
4346
4347 #################################################
4348 # check for sendfile support
4349
4350 with_sendfile_support=yes
4351 AC_MSG_CHECKING(whether to check to support sendfile)
4352 AC_ARG_WITH(sendfile-support,
4353 [  --with-sendfile-support Check for sendfile support (default=yes)],
4354 [ case "$withval" in
4355   yes)
4356
4357         AC_MSG_RESULT(yes);
4358
4359         case "$host_os" in
4360         *linux*)
4361                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
4362                 AC_TRY_LINK([#include <sys/sendfile.h>],
4363 [\
4364 int tofd, fromfd;
4365 off64_t offset;
4366 size_t total;
4367 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
4368 ],
4369 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
4370
4371                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
4372                 AC_TRY_LINK([#include <sys/sendfile.h>],
4373 [\
4374 int tofd, fromfd;
4375 off_t offset;
4376 size_t total;
4377 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
4378 ],
4379 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
4380
4381 # Try and cope with broken Linux sendfile....
4382                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
4383                 AC_TRY_LINK([\
4384 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
4385 #undef _FILE_OFFSET_BITS
4386 #endif
4387 #include <sys/sendfile.h>],
4388 [\
4389 int tofd, fromfd;
4390 off_t offset;
4391 size_t total;
4392 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
4393 ],
4394 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
4395
4396         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
4397                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
4398                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
4399                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
4400         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
4401                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
4402                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
4403                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
4404         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
4405                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
4406                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
4407         else
4408                 AC_MSG_RESULT(no);
4409         fi
4410
4411         ;;
4412         *freebsd* | *dragonfly* )
4413                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
4414                 AC_TRY_LINK([\
4415 #include <sys/types.h>
4416 #include <unistd.h>
4417 #include <sys/socket.h>
4418 #include <sys/uio.h>],
4419 [\
4420         int fromfd, tofd, ret, total=0;
4421         off_t offset, nwritten;
4422         struct sf_hdtr hdr;
4423         struct iovec hdtrl;
4424         hdr.headers = &hdtrl;
4425         hdr.hdr_cnt = 1;
4426         hdr.trailers = NULL;
4427         hdr.trl_cnt = 0;
4428         hdtrl.iov_base = NULL;
4429         hdtrl.iov_len = 0;
4430         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
4431 ],
4432 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
4433
4434         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
4435                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
4436                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
4437                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
4438         else
4439                 AC_MSG_RESULT(no);
4440         fi
4441         ;;
4442
4443         *hpux*)
4444                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
4445                 AC_TRY_LINK([\
4446 #include <sys/socket.h>
4447 #include <sys/uio.h>],
4448 [\
4449         int fromfd, tofd;
4450         size_t total=0;
4451         struct iovec hdtrl[2];
4452         ssize_t nwritten;
4453         off64_t offset;
4454
4455         hdtrl[0].iov_base = 0;
4456         hdtrl[0].iov_len = 0;
4457
4458         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
4459 ],
4460 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
4461         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
4462                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
4463                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
4464                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
4465         else
4466                 AC_MSG_RESULT(no);
4467         fi
4468
4469                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
4470                 AC_TRY_LINK([\
4471 #include <sys/socket.h>
4472 #include <sys/uio.h>],
4473 [\
4474         int fromfd, tofd;
4475         size_t total=0;
4476         struct iovec hdtrl[2];
4477         ssize_t nwritten;
4478         off_t offset;
4479
4480         hdtrl[0].iov_base = 0;
4481         hdtrl[0].iov_len = 0;
4482
4483         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
4484 ],
4485 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
4486         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
4487                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
4488                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
4489                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
4490         else
4491                 AC_MSG_RESULT(no);
4492         fi
4493         ;;
4494
4495         *solaris*)
4496                 AC_CHECK_LIB(sendfile,sendfilev)
4497                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
4498                 AC_TRY_LINK([\
4499 #include <sys/sendfile.h>],
4500 [\
4501         int sfvcnt;
4502         size_t xferred;
4503         struct sendfilevec vec[2];
4504         ssize_t nwritten;
4505         int tofd;
4506
4507         sfvcnt = 2;
4508
4509         vec[0].sfv_fd = SFV_FD_SELF;
4510         vec[0].sfv_flag = 0;
4511         vec[0].sfv_off = 0;
4512         vec[0].sfv_len = 0;
4513
4514         vec[1].sfv_fd = 0;
4515         vec[1].sfv_flag = 0;
4516         vec[1].sfv_off = 0;
4517         vec[1].sfv_len = 0;
4518         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
4519 ],
4520 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
4521
4522         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
4523                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
4524                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
4525                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
4526         else
4527                 AC_MSG_RESULT(no);
4528         fi
4529
4530                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
4531                 AC_TRY_LINK([\
4532 #include <sys/sendfile.h>],
4533 [\
4534         int sfvcnt;
4535         size_t xferred;
4536         struct sendfilevec vec[2];
4537         ssize_t nwritten;
4538         int tofd;
4539
4540         sfvcnt = 2;
4541
4542         vec[0].sfv_fd = SFV_FD_SELF;
4543         vec[0].sfv_flag = 0;
4544         vec[0].sfv_off = 0;
4545         vec[0].sfv_len = 0;
4546
4547         vec[1].sfv_fd = 0;
4548         vec[1].sfv_flag = 0;
4549         vec[1].sfv_off = 0;
4550         vec[1].sfv_len = 0;
4551         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
4552 ],
4553 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
4554
4555         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
4556                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
4557                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
4558                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
4559         else
4560                 AC_MSG_RESULT(no);
4561         fi
4562         ;;
4563         *aix*)
4564                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
4565                 AC_TRY_LINK([\
4566 #include <sys/socket.h>],
4567 [\
4568         int fromfd, tofd;
4569         size_t total=0;
4570         struct sf_parms hdtrl;
4571         ssize_t nwritten;
4572         off64_t offset;
4573
4574         hdtrl.header_data = 0;
4575         hdtrl.header_length = 0;
4576         hdtrl.file_descriptor = fromfd;
4577         hdtrl.file_offset = 0;
4578         hdtrl.file_bytes = 0;
4579         hdtrl.trailer_data = 0;
4580         hdtrl.trailer_length = 0;
4581
4582         nwritten = send_file(&tofd, &hdtrl, 0);
4583 ],
4584 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
4585         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
4586                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
4587                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
4588                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
4589         else
4590                 AC_MSG_RESULT(no);
4591         fi
4592         ;;
4593         *)
4594         ;;
4595         esac
4596         ;;
4597   *)
4598     AC_MSG_RESULT(no)
4599     ;;
4600   esac ],
4601   AC_MSG_RESULT(yes)
4602 )
4603
4604
4605 #################################################
4606 # Check whether winbind is supported on this platform.  If so we need to
4607 # build and install client programs, sbin programs and shared libraries
4608
4609 AC_MSG_CHECKING(whether to build winbind)
4610
4611 # Initially, the value of $host_os decides whether winbind is supported
4612
4613 HAVE_WINBIND=yes
4614
4615 # Define the winbind shared library name and any specific linker flags
4616 # it needs to be built with.
4617
4618 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
4619 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
4620 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
4621
4622 case "$host_os" in
4623         *linux*)
4624                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
4625                 ;;
4626         *freebsd[[5-9]]*)
4627                 # FreeBSD winbind client is implemented as a wrapper around
4628                 # the Linux version.
4629                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
4630                     nsswitch/winbind_nss_linux.o"
4631                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
4632                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
4633                 ;;
4634         *irix*)
4635                 # IRIX has differently named shared libraries
4636                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
4637                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
4638                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
4639                 ;;
4640         *solaris*)
4641                 # Solaris winbind client is implemented as a wrapper around
4642                 # the Linux version.
4643                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
4644                     nsswitch/winbind_nss_linux.o"
4645                 WINBIND_NSS_EXTRA_LIBS="-lsocket"
4646                 ;;
4647         *hpux11*)
4648                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
4649                 ;;
4650         *aix*)
4651                 # AIX has even differently named shared libraries.  No
4652                 # WINS support has been implemented yet.
4653                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
4654                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
4655                 WINBIND_NSS="nsswitch/WINBIND"
4656                 WINBIND_WINS_NSS=""
4657                 ;;
4658         *)
4659                 HAVE_WINBIND=no
4660                 winbind_no_reason=", unsupported on $host_os"
4661                 ;;
4662 esac
4663
4664 AC_SUBST(WINBIND_NSS)
4665 AC_SUBST(WINBIND_WINS_NSS)
4666 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
4667 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
4668 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
4669
4670 # Check the setting of --with-winbind
4671
4672 AC_ARG_WITH(winbind,
4673 [  --with-winbind          Build winbind (default, if supported by OS)],
4674
4675   case "$withval" in
4676         yes)
4677                 HAVE_WINBIND=yes
4678                 ;;
4679         no)
4680                 HAVE_WINBIND=no
4681                 winbind_reason=""
4682                 ;;
4683   esac ],
4684 )
4685
4686 # We need unix domain sockets for winbind
4687
4688 if test x"$HAVE_WINBIND" = x"yes"; then
4689         if test x"$samba_cv_unixsocket" = x"no"; then
4690                 winbind_no_reason=", no unix domain socket support on $host_os"
4691                 HAVE_WINBIND=no
4692         fi
4693 fi
4694
4695 # Display test results
4696
4697 if test x"$HAVE_WINBIND" = x"yes"; then
4698         AC_MSG_RESULT(yes)
4699         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
4700
4701         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
4702         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
4703         if test $BLDSHARED = true; then
4704                 SHLIB_PROGS="$SHLIB_PROGS $WINBIND_NSS $WINBIND_WINS_NSS"
4705
4706                 if test x"$with_pam" = x"yes"; then
4707                         SHLIB_PROGS="$SHLIB_PROGS nsswitch/pam_winbind.$SHLIBEXT"
4708                 fi
4709         fi
4710 else
4711         AC_MSG_RESULT(no$winbind_no_reason)
4712 fi
4713
4714 # Solaris 10 does have new member in nss_XbyY_key
4715 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
4716                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
4717                 [#include <nss_dbdefs.h>])
4718
4719 # Solaris has some extra fields in struct passwd that need to be
4720 # initialised otherwise nscd crashes.  
4721  
4722 AC_CHECK_MEMBER(struct passwd.pw_comment,
4723                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
4724                 [#include <pwd.h>])
4725
4726 AC_CHECK_MEMBER(struct passwd.pw_age,
4727                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
4728                 [#include <pwd.h>])
4729
4730 # AIX 4.3.x and 5.1 do not have as many members in
4731 # struct secmethod_table as AIX 5.2
4732 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
4733        [#include <usersec.h>])
4734 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
4735        [#include <usersec.h>])
4736
4737
4738 #################################################
4739 # Check to see if we should use the included popt 
4740
4741 AC_ARG_WITH(included-popt,
4742 [  --with-included-popt    use bundled popt library, not from system],
4743
4744   case "$withval" in
4745         yes)
4746                 INCLUDED_POPT=yes
4747                 ;;
4748         no)
4749                 INCLUDED_POPT=no
4750                 ;;
4751   esac ],
4752 )
4753 if test x"$INCLUDED_POPT" != x"yes"; then
4754     AC_CHECK_LIB(popt, poptGetContext,
4755                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
4756 fi
4757
4758 AC_MSG_CHECKING(whether to use included popt)
4759 if test x"$INCLUDED_POPT" = x"yes"; then
4760     AC_MSG_RESULT(yes)
4761     BUILD_POPT='$(POPT_OBJS)'
4762         POPTLIBS='$(POPT_OBJS)'
4763     FLAGS1="-I$srcdir/popt"
4764 else
4765     AC_MSG_RESULT(no)
4766         BUILD_POPT=""
4767     POPTLIBS="-lpopt"
4768 fi
4769 AC_SUBST(BUILD_POPT)
4770 AC_SUBST(POPTLIBS)
4771 AC_SUBST(FLAGS1)
4772
4773 #################################################
4774 # Check if the user wants Python
4775
4776 # At the moment, you can use this to set which Python binary to link
4777 # against.  (Libraries built for Python2.2 can't be used by 2.1,
4778 # though they can coexist in different directories.)  In the future
4779 # this might make the Python stuff be built by default.
4780
4781 # Defaulting python breaks the clean target if python isn't installed
4782
4783 PYTHON=
4784
4785 AC_ARG_WITH(python,
4786 [  --with-python=PYTHONNAME  build Python libraries],
4787 [ case "${withval-python}" in
4788   yes)
4789         PYTHON=python
4790         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS python_ext"
4791         ;;
4792   no)
4793         PYTHON=
4794         ;;
4795   *)
4796         PYTHON=${withval-python}
4797         ;;
4798   esac ])
4799 AC_SUBST(PYTHON)
4800
4801 for i in `echo $default_static_modules | sed -e's/,/ /g'`
4802 do
4803         eval MODULE_DEFAULT_$i=STATIC
4804 done
4805
4806 for i in `echo $default_shared_modules | sed -e's/,/ /g'`
4807 do
4808         dnl Fall back to static if we cannot build shared libraries
4809         eval MODULE_DEFAULT_$i=STATIC
4810
4811         if test $BLDSHARED = true; then
4812                 eval MODULE_DEFAULT_$i=SHARED
4813         fi
4814 done
4815
4816 dnl Always built these modules static
4817 MODULE_pdb_guest=STATIC
4818 MODULE_rpc_spoolss=STATIC
4819 MODULE_rpc_srv=STATIC
4820 MODULE_idmap_tdb=STATIC
4821
4822 AC_ARG_WITH(static-modules,
4823 [  --with-static-modules=MODULES  Comma-seperated list of names of modules to statically link in],
4824 [ if test $withval; then
4825         for i in `echo $withval | sed -e's/,/ /g'`
4826         do
4827                 eval MODULE_$i=STATIC
4828         done
4829 fi ])
4830
4831 AC_ARG_WITH(shared-modules,
4832 [  --with-shared-modules=MODULES  Comma-seperated list of names of modules to build shared],
4833 [ if test $withval; then
4834         for i in `echo $withval | sed -e's/,/ /g'`
4835         do
4836                         eval MODULE_$i=SHARED
4837         done
4838 fi ])
4839
4840 ###########################################################################
4841 ## contributed pdb_modules
4842
4843 SMB_MODULE(pdb_xml, passdb/pdb_xml.o, "bin/xml.$SHLIBEXT", PDB,
4844                   [ PASSDB_LIBS="$PASSDB_LIBS $XML_LIBS" ] )
4845 SMB_MODULE(pdb_mysql, passdb/pdb_mysql.o, "bin/mysql.$SHLIBEXT", PDB, 
4846                    [ PASSDB_LIBS="$PASSDB_LIBS $MYSQL_LIBS" ]   )
4847 SMB_MODULE(pdb_pgsql, passdb/pdb_pgsql.o, "bin/pgsql.$SHLIBEXT", PDB, 
4848                    [ PASSDB_LIBS="$PASSDB_LIBS $PGSQL_LIBS" ]   )
4849
4850 ## end of contributed pdb_modules
4851 ###########################################################################
4852
4853 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB, 
4854                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
4855 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
4856 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
4857 SMB_MODULE(pdb_guest, passdb/pdb_guest.o, "bin/guest.$SHLIBEXT", PDB)
4858 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
4859
4860 SMB_MODULE(rpc_lsa, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
4861 SMB_MODULE(rpc_reg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
4862 SMB_MODULE(rpc_lsa_ds, \$(RPC_LSA_DS_OBJ), "bin/librpc_lsa_ds.$SHLIBEXT", RPC)
4863 SMB_MODULE(rpc_wks, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
4864 SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC)
4865 SMB_MODULE(rpc_net, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
4866 SMB_MODULE(rpc_dfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
4867 SMB_MODULE(rpc_srv, \$(RPC_SVC_OBJ), "bin/librpc_srvsvc.$SHLIBEXT", RPC)
4868 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
4869 SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC)
4870 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
4871 SMB_MODULE(rpc_echo, \$(RPC_ECHO_OBJ), "bin/librpc_echo.$SHLIBEXT", RPC)
4872 SMB_SUBSYSTEM(RPC,smbd/server.o)
4873
4874 SMB_MODULE(idmap_ldap, sam/idmap_ldap.o, "bin/idmap_ldap.$SHLIBEXT", IDMAP)
4875 SMB_MODULE(idmap_tdb, sam/idmap_tdb.o, "bin/idmap_tdb.$SHLIBEXT", IDMAP)
4876 SMB_MODULE(idmap_rid, sam/idmap_rid.o, "bin/idmap_rid.$SHLIBEXT", IDMAP)
4877 SMB_MODULE(idmap_ad, sam/idmap_ad.o, "bin/idmap_ad.$SHLIBEXT", IDMAP)
4878 SMB_SUBSYSTEM(IDMAP,sam/idmap.o)
4879
4880 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
4881 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
4882 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
4883 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
4884 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
4885
4886 SMB_MODULE(auth_rhosts, \$(AUTH_RHOSTS_OBJ), "bin/rhosts.$SHLIBEXT", AUTH)
4887 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
4888 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
4889 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
4890 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
4891 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
4892 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
4893 SMB_SUBSYSTEM(AUTH,auth/auth.o)
4894
4895 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
4896 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
4897 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
4898 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
4899 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
4900 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
4901 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
4902 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
4903 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
4904 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
4905 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
4906 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
4907 SMB_MODULE(vfs_catia, \$(VFS_AFSACL_OBJ), "bin/catia.$SHLIBEXT", VFS)
4908 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
4909
4910 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
4911
4912 #################################################
4913 # do extra things if we are running insure
4914
4915 if test "${ac_cv_prog_CC}" = "insure"; then
4916         CPPFLAGS="$CPPFLAGS -D__INSURE__"
4917 fi
4918
4919 #################################################
4920 # Display summary of libraries detected
4921
4922 AC_MSG_RESULT([Using libraries:])
4923 AC_MSG_RESULT([    LIBS = $LIBS])
4924 if test x"$with_ads_support" != x"no"; then
4925    AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
4926 fi
4927 if test x"$with_ldap_support" != x"no"; then
4928    AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
4929 fi
4930 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
4931
4932 #################################################
4933 # final configure stuff
4934
4935 AC_MSG_CHECKING([configure summary])
4936 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
4937            AC_MSG_RESULT(yes),
4938            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
4939            AC_MSG_WARN([cannot run when cross-compiling]))
4940
4941 builddir=`pwd`
4942 AC_SUBST(builddir)
4943
4944 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
4945 LIB_REMOVE_USR_LIB(LDFLAGS)
4946 LIB_REMOVE_USR_LIB(LIBS)
4947
4948 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
4949 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
4950 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
4951
4952 AC_OUTPUT(include/stamp-h Makefile script/findsmb smbadduser script/gen-8bit-gap.sh)
4953
4954 #################################################
4955 # Print very concise instructions on building/use
4956 if test "x$enable_dmalloc" = xyes
4957 then
4958         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
4959         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
4960 fi