Build libnetapi shared and static if possible.
[ira/wip.git] / source / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.53 or above
4 AC_PREREQ(2.53)
5 AC_INIT(include/includes.h)
6 AC_CONFIG_HEADER(include/config.h)
7 AC_DEFINE(CONFIG_H_IS_FROM_SAMBA,1,[Marker for samba's config.h])
8
9 case "$PATH" in
10     */usr/ucb*)
11         AC_MSG_WARN([\$PATH contains /usr/ucb - build errors may follow])
12         ;;
13 esac 
14
15 SMB_VERSION_STRING=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_OFFICIAL_STRING' | cut -d '"' -f2`
16 echo "SAMBA VERSION: ${SMB_VERSION_STRING}"
17
18 SAMBA_VERSION_GIT_COMMIT_FULLREV=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_GIT_COMMIT_FULLREV' | cut -d ' ' -f3- | cut -d '"' -f2`
19 if test -n "${SAMBA_VERSION_GIT_COMMIT_FULLREV}";then
20         echo "BUILD COMMIT REVISION: ${SAMBA_VERSION_GIT_COMMIT_FULLREV}"
21 fi
22 SAMBA_VERSION_GIT_COMMIT_DATE=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_GIT_COMMIT_DATE' | cut -d ' ' -f3-`
23 if test -n "${SAMBA_VERSION_GIT_COMMIT_DATE}";then
24         echo "BUILD COMMIT DATE: ${SAMBA_VERSION_GIT_COMMIT_DATE}"
25 fi
26 SAMBA_VERSION_GIT_COMMIT_TIME=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_GIT_COMMIT_TIME' | cut -d ' ' -f3-`
27 if test -n "${SAMBA_VERSION_GIT_COMMIT_TIME}";then
28         echo "BUILD COMMIT TIME: ${SAMBA_VERSION_GIT_COMMIT_TIME}"
29
30         # just to keep the build-farm gui happy for now...
31         echo "BUILD REVISION: ${SAMBA_VERSION_GIT_COMMIT_TIME}"
32 fi
33
34 AC_LIBREPLACE_LOCATION_CHECKS
35
36 AC_DISABLE_STATIC
37 AC_ENABLE_SHARED
38
39 #################################################
40 # Directory handling stuff to support both the
41 # legacy SAMBA directories and FHS compliant
42 # ones...
43 AC_PREFIX_DEFAULT(/usr/local/samba)
44
45 rootsbindir="\${SBINDIR}"
46 lockdir="\${VARDIR}/locks"
47 piddir="\${VARDIR}/locks"
48 test "${mandir}" || mandir="\${prefix}/man"
49 logfilebase="\${VARDIR}"
50 privatedir="\${prefix}/private"
51 test "${libdir}" || libdir="\${prefix}/lib"
52 pammodulesdir="\${LIBDIR}/security"
53 configdir="\${LIBDIR}"
54 swatdir="\${prefix}/swat"
55 codepagedir="\${LIBDIR}"
56 statedir="\${LOCKDIR}"
57 cachedir="\${LOCKDIR}"
58
59 AC_ARG_WITH(fhs,
60 [  --with-fhs              Use FHS-compliant paths (default=no)],
61 [ case "$withval" in
62   yes)
63     lockdir="\${VARDIR}/lib/samba"
64     piddir="\${VARDIR}/run"
65     mandir="\${prefix}/share/man"
66     logfilebase="\${VARDIR}/log/samba"
67     privatedir="\${CONFIGDIR}/private"
68     test "${libdir}" || libdir="\${prefix}/lib/samba"
69     configdir="\${sysconfdir}/samba"
70     swatdir="\${DATADIR}/samba/swat"
71     codepagedir="\${LIBDIR}"
72     statedir="\${VARDIR}/lib/samba"
73     cachedir="\${VARDIR}/lib/samba"
74     AC_DEFINE(FHS_COMPATIBLE, 1, [Whether to use fully FHS-compatible paths])
75     ;;
76   esac])
77
78 #################################################
79 # set private directory location
80 AC_ARG_WITH(privatedir,
81 [  --with-privatedir=DIR   Where to put smbpasswd ($ac_default_prefix/private)],
82 [ case "$withval" in
83   yes|no)
84   #
85   # Just in case anybody calls it without argument
86   #
87     AC_MSG_WARN([--with-privatedir called without argument - will use default])
88   ;;
89   * )
90     privatedir="$withval"
91     ;;
92   esac])
93
94 #################################################
95 # set root sbin directory location
96 AC_ARG_WITH(rootsbindir,
97 [  --with-rootsbindir=DIR  Which directory to use for root sbin ($ac_default_prefix/sbin)],
98 [ case "$withval" in
99   yes|no)
100   #
101   # Just in case anybody calls it without argument
102   #
103     AC_MSG_WARN([--with-rootsbindir called without argument - will use default])
104   ;;
105   * )
106     rootsbindir="$withval"
107     ;;
108   esac])
109
110 #################################################
111 # set lock directory location
112 AC_ARG_WITH(lockdir,
113 [  --with-lockdir=DIR      Where to put lock files ($ac_default_prefix/var/locks)],
114 [ case "$withval" in
115   yes|no)
116   #
117   # Just in case anybody calls it without argument
118   #
119     AC_MSG_WARN([--with-lockdir called without argument - will use default])
120   ;;
121   * )
122     lockdir="$withval"
123     ;;
124   esac])
125
126 #################################################
127 # set pid directory location
128 AC_ARG_WITH(piddir,
129 [  --with-piddir=DIR       Where to put pid files ($ac_default_prefix/var/locks)],
130 [ case "$withval" in
131   yes|no)
132   #
133   # Just in case anybody calls it without argument
134   #
135     AC_MSG_WARN([--with-piddir called without argument - will use default])
136   ;;
137   * )
138     piddir="$withval"
139     ;;
140   esac])
141
142 #################################################
143 # set SWAT directory location
144 AC_ARG_WITH(swatdir,
145 [  --with-swatdir=DIR      Where to put SWAT files ($ac_default_prefix/swat)],
146 [ case "$withval" in
147   yes|no)
148   #
149   # Just in case anybody does it
150   #
151     AC_MSG_WARN([--with-swatdir called without argument - will use default])
152   ;;
153   * )
154     swatdir="$withval"
155     ;;
156   esac])
157
158 #################################################
159 # set configuration directory location
160 AC_ARG_WITH(configdir,
161 [  --with-configdir=DIR    Where to put configuration files ($libdir)],
162 [ case "$withval" in
163   yes|no)
164   #
165   # Just in case anybody does it
166   #
167     AC_MSG_WARN([--with-configdir called without argument - will use default])
168   ;;
169   * )
170     configdir="$withval"
171     ;;
172   esac])
173
174 #################################################
175 # set log directory location
176 AC_ARG_WITH(logfilebase,
177 [  --with-logfilebase=DIR  Where to put log files ($VARDIR)],
178 [ case "$withval" in
179   yes|no)
180   #
181   # Just in case anybody does it
182   #
183     AC_MSG_WARN([--with-logfilebase called without argument - will use default])
184   ;;
185   * )
186     logfilebase="$withval"
187     ;;
188   esac])
189
190
191 #################################################
192 # set ctdb source directory location
193 AC_ARG_WITH(ctdb,
194 [  --with-ctdb=DIR  Where to find ctdb sources],
195 [ case "$withval" in
196   yes|no)
197     AC_MSG_WARN([--with-ctdb called without argument])
198   ;;
199   * )
200     ctdbdir="$withval"
201     ;;
202   esac])
203
204 #################################################
205 # set lib directory location
206 AC_ARG_WITH(libdir,
207 [  --with-libdir=DIR       Where to put libdir ($libdir)],
208 [ case "$withval" in
209   yes|no)
210   #
211   # Just in case anybody does it
212   #
213     AC_MSG_WARN([--with-libdir without argument - will use default])
214   ;;
215   * )
216     libdir="$withval"
217     ;;
218   esac])
219
220 #################################################
221 # set PAM modules directory location
222 AC_ARG_WITH(pammodulesdir,
223 [  --with-pammodulesdir=DIR  Which directory to use for PAM modules ($ac_default_prefix/$libdir/security)],
224 [ case "$withval" in
225   yes|no)
226   #
227   # Just in case anybody calls it without argument
228   #
229     AC_MSG_WARN([--with-pammodulesdir called without argument - will use default])
230   ;;
231   * )
232     pammodulesdir="$withval"
233     ;;
234   esac])
235
236 #################################################
237 # set man directory location
238 AC_ARG_WITH(mandir,
239 [  --with-mandir=DIR       Where to put man pages ($mandir)],
240 [ case "$withval" in
241   yes|no)
242   #
243   # Just in case anybody does it
244   #
245     AC_MSG_WARN([--with-mandir without argument - will use default])
246   ;;
247   * )
248     mandir="$withval"
249     ;;
250   esac])
251
252 AC_ARG_WITH(cfenc,
253 [  --with-cfenc=HEADERDIR  Use internal CoreFoundation encoding API
254                           for optimization (Mac OS X/Darwin only)],
255 [
256 # May be in source $withval/CoreFoundation/StringEncodings.subproj.
257 # Should have been in framework $withval/CoreFoundation.framework/Headers.
258 for d in \
259     $withval/CoreFoundation/StringEncodings.subproj \
260     $withval/StringEncodings.subproj \
261     $withval/CoreFoundation.framework/Headers \
262     $withval/Headers \
263     $withval
264 do
265     if test -r $d/CFStringEncodingConverter.h; then
266         ln -sfh $d include/CoreFoundation
267     fi
268 done
269 ])
270
271 SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
272 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/replace"
273 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/talloc"
274 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/tdb/include"
275 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
276 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
277
278 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/popt"
279
280 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
281 if test "x${srcdir-.}" != "x."; then
282         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
283 fi
284
285 AC_SUBST(configdir)
286 AC_SUBST(lockdir)
287 AC_SUBST(piddir)
288 AC_SUBST(logfilebase)
289 AC_SUBST(ctdbdir)
290 AC_SUBST(privatedir)
291 AC_SUBST(swatdir)
292 AC_SUBST(bindir)
293 AC_SUBST(sbindir)
294 AC_SUBST(codepagedir)
295 AC_SUBST(statedir)
296 AC_SUBST(cachedir)
297 AC_SUBST(rootsbindir)
298 AC_SUBST(pammodulesdir)
299
300 dnl Unique-to-Samba variables we'll be playing with.
301 AC_SUBST(SAMBA_CPPFLAGS)
302 AC_SUBST(SHELL)
303 AC_SUBST(LDSHFLAGS)
304 AC_SUBST(SONAMEFLAG)
305 AC_SUBST(SHLD)
306 AC_SUBST(MODULE_EXPORTS)
307 AC_SUBST(DSO_EXPORTS)
308 AC_SUBST(HOST_OS)
309 AC_SUBST(PICFLAG)
310 AC_SUBST(PIE_CFLAGS)
311 AC_SUBST(PIE_LDFLAGS)
312 AC_SUBST(SHLIBEXT)
313 AC_SUBST(INSTALLLIBCMD_SH)
314 AC_SUBST(INSTALLLIBCMD_A)
315 AC_SUBST(UNINSTALLLIBCMD_SH)
316 AC_SUBST(UNINSTALLLIBCMD_A)
317 AC_SUBST(INSTALL_LIBADDNS)
318 AC_SUBST(UNINSTALL_LIBADDNS)
319 AC_SUBST(LIBADDNS_SHARED)
320 AC_SUBST(LIBADDNS)
321 AC_SUBST(INSTALL_LIBSMBCLIENT)
322 AC_SUBST(UNINSTALL_LIBSMBCLIENT)
323 AC_SUBST(LIBSMBCLIENT_SHARED)
324 AC_SUBST(LIBSMBCLIENT)
325 AC_SUBST(INSTALL_LIBSMBSHAREMODES)
326 AC_SUBST(UNINSTALL_LIBSMBSHAREMODES)
327 AC_SUBST(LIBSMBSHAREMODES_SHARED)
328 AC_SUBST(LIBSMBSHAREMODES)
329 AC_SUBST(INSTALL_LIBNETAPI)
330 AC_SUBST(UNINSTALL_LIBNETAPI)
331 AC_SUBST(LIBNETAPI_SHARED)
332 AC_SUBST(LIBNETAPI)
333 AC_SUBST(PRINT_LIBS)
334 AC_SUBST(AUTH_LIBS)
335 AC_SUBST(ACL_LIBS)
336 AC_SUBST(PASSDB_LIBS)
337 AC_SUBST(IDMAP_LIBS)
338 AC_SUBST(KRB5_LIBS)
339 AC_SUBST(UUID_LIBS)
340 AC_SUBST(LDAP_LIBS)
341 AC_SUBST(PAM_MODULES)
342 AC_SUBST(INSTALL_PAM_MODULES)
343 AC_SUBST(UNINSTALL_PAM_MODULES)
344 AC_SUBST(NSS_MODULES)
345 AC_SUBST(EXTRA_BIN_PROGS)
346 AC_SUBST(SMBMOUNT_PROGS)
347 AC_SUBST(CIFSMOUNT_PROGS)
348 AC_SUBST(INSTALL_CIFSMOUNT)
349 AC_SUBST(UNINSTALL_CIFSMOUNT)
350 AC_SUBST(CIFSSPNEGO_PROGS)
351 AC_SUBST(INSTALL_CIFSSPNEGO)
352 AC_SUBST(UNINSTALL_CIFSSPNEGO)
353 AC_SUBST(EXTRA_SBIN_PROGS)
354 AC_SUBST(EXTRA_ALL_TARGETS)
355 AC_SUBST(CONFIG_LIBS)
356 AC_SUBST(NSCD_LIBS)
357
358 ## check for --enable-debug first before checking CFLAGS before
359 ## so that we don't mix -O and -g
360 AC_ARG_ENABLE(debug,
361 [  --enable-debug          Turn on compiler debugging information (default=no)],
362     [if eval "test x$enable_debug = xyes"; then
363         CFLAGS="${CFLAGS} -g"
364     fi])
365
366 # compile with optimization and without debugging by default, but
367 # allow people to set their own preference.
368 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
369 # if it has no value.  This prevent *very* large debug binaries from occurring
370 # by default.
371 if test "x$CFLAGS" = x; then
372   CFLAGS="-O"
373 fi
374
375 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
376
377 AC_LIBREPLACE_CC_CHECKS
378
379 m4_include(lib/socket_wrapper/config.m4)
380 m4_include(lib/nss_wrapper/config.m4)
381
382 SWAT_SBIN_TARGETS='bin/swat$(EXEEXT)'
383 SWAT_INSTALL_TARGETS=installswat
384
385 AC_ARG_ENABLE(swat,
386 [  --enable-swat           Build the SWAT tool (default=yes)],
387 [
388     case "$enable_swat" in
389         no)
390             SWAT_SBIN_TARGETS=''
391             SWAT_INSTALL_TARGETS=''
392             ;;
393     esac
394 ])
395
396 AC_SUBST(SWAT_SBIN_TARGETS)
397 AC_SUBST(SWAT_INSTALL_TARGETS)
398
399 #################################################
400 # set prefix for 'make test'
401 selftest_prefix="./"
402 AC_SUBST(selftest_prefix)
403 AC_ARG_WITH(selftest-prefix,
404 [  --with-selftest-prefix=DIR    The prefix where make test will be run ($selftest_prefix)],
405 [ case "$withval" in
406   yes|no)
407     AC_MSG_WARN([--with-selftest-prefix called without argument - will use default])
408   ;;
409   * )
410     selftest_prefix="$withval"
411     ;;
412   esac
413 ])
414
415 #################################################
416 # set path of samba4's smbtorture
417 smbtorture4_path=""
418 AC_SUBST(smbtorture4_path)
419 AC_ARG_WITH(smbtorture4_path,
420 [  --with-smbtorture4-path=PATH    The path to a samba4 smbtorture for make test (none)],
421 [ case "$withval" in
422   yes|no)
423     AC_MSG_ERROR([--with-smbtorture4-path should take a path])
424   ;;
425   * )
426     smbtorture4_path="$withval"
427     if test -z "$smbtorture4_path" -a ! -f $smbtorture4_path; then
428         AC_MSG_ERROR(['$smbtorture_path' does not  exist!])
429     fi
430   ;;
431  esac
432 ])
433
434 AC_ARG_ENABLE(developer, [  --enable-developer      Turn on developer warnings and debugging (default=no)],
435     [if eval "test x$enable_developer = xyes"; then
436         developer=yes
437     fi])
438
439 AC_ARG_ENABLE(krb5developer, [  --enable-krb5developer  Turn on developer warnings and debugging, except -Wstrict-prototypes (default=no)],
440     [if eval "test x$enable_krb5developer = xyes"; then
441         developer=yes
442         krb5_developer=yes
443     fi])
444
445 # Probe the gcc version for extra CFLAGS. We always stash these in
446 # DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
447 # Makefile edit, avoiding the need to re-run configure.
448 if test x"$ac_cv_prog_gcc" = x"yes" ; then
449         DEVELOPER_CFLAGS="-gstabs -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
450         # Add -Wdeclaration-after-statement if compiler supports it
451         AC_CACHE_CHECK(
452           [that the C compiler understands -Wdeclaration-after-statement],
453           samba_cv_HAVE_Wdeclaration_after_statement, [
454           AC_TRY_RUN_STRICT([
455             int main(void)
456             {
457                 return 0;
458             }],[-Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
459             samba_cv_HAVE_Wdeclaration_after_statement=yes,
460             samba_cv_HAVE_Wdeclaration_after_statement=no,
461             samba_cv_HAVE_Wdeclaration_after_statement=cross)
462        ])
463
464         if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
465             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
466         fi
467
468         #-Werror-implicit-function-declaration
469         AC_CACHE_CHECK(
470           [that the C compiler understands -Werror-implicit-function-declaration],
471           samba_cv_HAVE_Werror_implicit_function_declaration, [
472           AC_TRY_RUN_STRICT([
473             int main(void)
474             {
475                 return 0;
476             }],[-Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
477             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
478             samba_cv_HAVE_Werror_implicit_function_declaration=no,
479             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
480        ])
481        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
482             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
483        fi
484
485         # krb5developer is like developer, except we don't get
486         # -Wstrict-prototypes.
487        if test x"$krb5_developer" != x"$yes" ; then
488             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
489        fi
490 fi
491
492 AC_ARG_ENABLE(dmalloc, [  --enable-dmalloc        Enable heap debugging [default=no]])
493
494 if test "x$enable_dmalloc" = xyes
495 then
496         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
497         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
498                   [Define to check invariants around some common functions])
499         LIBS="$LIBS -ldmalloc"  
500 fi
501
502 #################################################
503 # check for a shared memory profiling support
504 AC_MSG_CHECKING(whether to use profiling)
505 AC_ARG_WITH(profiling-data,
506 [  --with-profiling-data   Include gathering source code profile information (default=no)],
507 [ case "$withval" in
508   yes)
509     AC_MSG_RESULT(yes)
510     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
511     samba_cv_WITH_PROFILE=yes
512     ;;
513   *)
514     AC_MSG_RESULT(no)
515     samba_cv_WITH_PROFILE=no
516     ;;
517   esac ],
518   AC_MSG_RESULT(no)
519 )
520
521 dnl Checks for programs.
522
523 AC_PROG_INSTALL
524 AC_PROG_AWK
525 AC_PATH_PROG(PERL, perl)
526
527 AC_CHECK_TOOL(AR, ar)
528
529 dnl Check if we use GNU ld
530 LD=ld
531 AC_PROG_LD_GNU
532
533 dnl Certain versions of GNU ld the default is not to have the
534 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
535 dnl warnings when building modules.
536 if test "$ac_cv_prog_gnu_ld" = "yes"; then
537         ac_cv_gnu_ld_version=`$LD -v 2>/dev/null | head -1`
538         AC_MSG_CHECKING(GNU ld release date)
539         changequote(,)dnl
540         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'`
541         changequote([,])dnl
542         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
543         if test -n "$ac_cv_gnu_ld_date"; then
544         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
545                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
546         fi
547         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
548                 ac_cv_gnu_ld_version_script=yes
549         fi
550         else
551            AC_MSG_CHECKING(GNU ld release version)
552            changequote(,)dnl
553            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
554            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
555            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
556            changequote([,])dnl
557            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
558            AC_MSG_CHECKING(GNU ld release version major)
559            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
560            AC_MSG_CHECKING(GNU ld release version minor)
561            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
562            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
563              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
564            fi
565            if test "$ac_cv_gnu_ld_vernr_major" -gt 2 || test "$ac_cv_gnu_l= d_vernr_major"=2 && test "$ac_cv_gnu_ld_vernr_minor" -ge 12; then
566              ac_cv_gnu_ld_version_script=yes
567            fi
568         fi
569 fi
570
571 dnl look for executable suffix
572 AC_EXEEXT
573
574 dnl Check if C compiler understands -c and -o at the same time
575 AC_PROG_CC_C_O
576 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
577       BROKEN_CC=
578 else
579       BROKEN_CC=#
580 fi
581 AC_SUBST(BROKEN_CC)
582
583 dnl Check if the C compiler understands -Werror
584 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
585  AC_TRY_RUN_STRICT([
586   int main(void)
587   {
588         return 0;
589   }],[-Werror],[$CPPFLAGS],[$LDFLAGS],
590   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
591 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
592    Werror_FLAGS="-Werror"
593 else
594 dnl Check if the C compiler understands -w2
595 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
596  AC_TRY_RUN_STRICT([
597   int main(void)
598   {
599         return 0;
600   }],[-w2],[$CPPFLAGS],[$LDFLAGS],
601   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
602 if test x"$samba_cv_HAVE_w2" = x"yes"; then
603    Werror_FLAGS="-w2"
604 fi
605 fi
606
607 dnl Check if the C compiler understands volatile (it should, being ANSI).
608 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
609     AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
610         samba_cv_volatile=yes,samba_cv_volatile=no)])
611 if test x"$samba_cv_volatile" = x"yes"; then
612    AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
613 fi
614
615 ############################################
616 # check if the compiler can handle negative enum values
617 # and don't truncate the values to INT_MAX
618 # a runtime test is needed here
619 AC_SUBST(PIDL_ARGS)
620 AC_CACHE_CHECK([that the C compiler understands negative enum values],SMB_BUILD_CC_NEGATIVE_ENUM_VALUES, [
621     AC_TRY_RUN(
622 [
623         #include <stdio.h>
624         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
625         int main(void) {
626                 enum negative_values v1 = NEGATIVE_VALUE;
627                 unsigned v2 = NEGATIVE_VALUE;
628
629                 if (v1 != 0xFFFFFFFF) {
630                         printf("%u != 0xFFFFFFFF\n", v1);
631                         return 1;
632                 }
633                 if (v2 != 0xFFFFFFFF) {
634                         printf("%u != 0xFFFFFFFF\n", v2);
635                         return 1;
636                 }
637
638                 return 0;
639         }
640 ],
641         SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes,SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=no)])
642 if test x"$SMB_BUILD_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
643         AC_MSG_WARN([using --unit-enums for pidl])
644         PIDL_ARGS="$PIDL_ARGS --uint-enums"
645 fi
646
647 dnl Figure out the flags to support named structure initializers
648
649 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
650
651 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
652 AC_MSG_CHECKING(uname -s)
653 AC_MSG_RESULT(${UNAME_S})
654
655 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
656 AC_MSG_CHECKING(uname -r)
657 AC_MSG_RESULT(${UNAME_R})
658
659 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
660 AC_MSG_CHECKING(uname -m)
661 AC_MSG_RESULT(${UNAME_M})
662
663 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
664 AC_MSG_CHECKING(uname -p)
665 AC_MSG_RESULT(${UNAME_P})
666
667 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
668 AC_MSG_CHECKING(uname -i)
669 AC_MSG_RESULT(${UNAME_I})
670
671 dnl Add #include for broken IRIX header files
672   case "$host_os" in
673         *irix6*)
674                 #TODO add to libreplace
675                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
676                         dnl Fix sensible defaults for MIPSPro compilers. The
677                         dnl error numbers are valid for the 7.3 compilers,
678                         dnl hopefully also valid for the 7.4 series.
679                         dnl
680                         dnl Bugzilla 3801. Force an error on warning 1035
681                         dnl so we don't incorrectly detect stdint.h. This
682                         dnl warning is emitted for #error directives.
683                         CFLAGS="$CFLAGS -diag_error 1035"
684                         dnl 1209: Controlling expression is constant
685                         dnl 1174: Function foo declared but never referenced
686                         dnl 3201: Parameter foo was never referenced
687                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
688                 fi
689         ;;
690 esac
691
692 DYNEXP=
693 AC_SUBST(DYNEXP)
694
695 dnl Add modules that have to be built by default here
696 dnl These have to be built static:
697 default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_winreg rpc_initshutdown rpc_lsa_ds rpc_wkssvc rpc_svcctl2 rpc_ntsvcs rpc_net rpc_netdfs rpc_srvsvc2 rpc_spoolss rpc_eventlog2 auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default nss_info_template"
698
699 dnl These are preferably build shared, and static if dlopen() is not available
700 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 auth_script vfs_readahead vfs_syncops"
701
702 if test "x$developer" = xyes; then
703    default_static_modules="$default_static_modules rpc_rpcecho"
704    default_shared_modules="$default_shared_modules charset_weird"
705 fi
706
707 #
708 # Config CPPFLAG settings for strange OS's that must be set
709 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
710 # case statement; its first reference must be unconditional.
711 #
712 case "$host_os" in
713     *hpux*)
714 #
715 # Defines needed for HPUX support.
716 # HPUX has bigcrypt but (sometimes?) doesn't use it for
717 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
718 #
719       case `uname -r` in
720                 *9*|*10*|*11)
721                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
722                 ;;
723       esac
724       ;;
725
726 #
727 # CRAY Unicos has broken const handling
728        *unicos*)
729           AC_MSG_RESULT([disabling const])
730           CPPFLAGS="$CPPFLAGS -Dconst="
731           ;;
732         
733 #
734 # AIX4.x doesn't even admit to having large
735 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
736 #
737     *aix4*)
738           AC_MSG_RESULT([enabling large file support])
739       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
740           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
741       ;;
742 #
743 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
744 # to the existance of large files..
745 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
746 # recommendations on large file support, however it makes the
747 # compile work using gcc 2.7 and 2.8, whereas using the Sun
748 # recommendation makes the compile fail on gcc2.7. JRA.
749 #
750 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
751 #
752         *solaris*)
753                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
754                 case `uname -r` in
755                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
756                                 AC_MSG_RESULT([no large file support])
757                                 ;;
758                         5.*)
759                         AC_MSG_RESULT([enabling large file support])
760                         if test "$ac_cv_prog_gcc" = yes; then
761                                 ${CC-cc} -v >conftest.c 2>&1
762                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
763                                 rm -fr conftest.c
764                                 case "$ac_cv_gcc_compiler_version_number" in
765                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
766                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
767                                                 LDFLAGS="$LDFLAGS -lthread"
768                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
769                                                 ;;
770                                         *)
771                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
772                                                 LDFLAGS="$LDFLAGS -lthread"
773                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
774                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
775                                                 ;;
776                                 esac
777                         else
778                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
779                                 LDFLAGS="$LDFLAGS -lthread"
780                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
781                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
782                         fi
783                         ;;
784                 esac
785                 ;;
786 #
787 # IRIX uses SYSV printing.  Make sure to set that here
788 #
789         *irix*)
790                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
791                 ;;
792         *freebsd*|*dragonfly*)
793                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
794                 ;;
795 #
796 # VOS may need to have POSIX support and System V compatibility enabled.
797 #
798     *vos*)
799     case "$CPPFLAGS" in
800           *-D_POSIX_C_SOURCE*)
801                 ;;
802           *)
803                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
804                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
805                 ;;
806     esac
807     case "$CPPFLAGS" in
808           *-D_SYSV*|*-D_SVID_SOURCE*)
809                 ;;
810           *)
811                 CPPFLAGS="$CPPFLAGS -D_SYSV"
812                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
813     esac
814     ;;
815 #
816 # Tests needed for SINIX large file support.
817 #
818     *sysv4*)
819       if test $host = mips-sni-sysv4 ; then
820         AC_MSG_CHECKING([for LFS support])
821         old_CPPFLAGS="$CPPFLAGS"
822         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
823         AC_TRY_RUN([
824 #include <unistd.h>
825 main () {
826 #if _LFS64_LARGEFILE == 1
827 exit(0);
828 #else
829 exit(1);
830 #endif
831 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
832         CPPFLAGS="$old_CPPFLAGS"
833         if test x$SINIX_LFS_SUPPORT = xyes ; then
834           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
835                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
836           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
837           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
838           LIBS="`getconf LFS64_LIBS` $LIBS"
839         fi
840       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
841       fi
842     ;;
843
844 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
845 #
846     *linux*)
847         AC_MSG_CHECKING([for LFS support])
848         old_CPPFLAGS="$CPPFLAGS"
849         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
850        AC_TRY_RUN([
851 #include <unistd.h>
852 #include <sys/utsname.h>
853 #include <string.h>
854 #include <stdlib.h>
855 main() {
856 #if _LFS64_LARGEFILE == 1
857        struct utsname uts;
858        char *release;
859        int major, minor;
860
861        /* Ensure this is glibc 2.2 or higher */
862 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
863        int libc_major = __GLIBC__;
864        int libc_minor = __GLIBC_MINOR__;
865
866        if (libc_major < 2)
867               exit(1);
868        if (libc_minor < 2)
869               exit(1);
870 #endif
871
872        /* Ensure this is kernel 2.4 or higher */
873
874        uname(&uts);
875        release = strdup(uts.release);
876        major = atoi(strsep(&release, "."));
877        minor = atoi(strsep(&release, "."));
878
879        if (major > 2 || (major == 2 && minor > 3))
880                exit(0);
881        exit(1);
882 #else
883        exit(1);
884 #endif
885 }
886 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
887         CPPFLAGS="$old_CPPFLAGS"
888         if test x$LINUX_LFS_SUPPORT = xyes ; then
889                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
890                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
891                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
892                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
893         fi
894         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
895         ;;
896
897 #
898 # MacOS X is the *only* system that uses compose character in utf8. This
899 # is so horribly broken....
900 #
901     *darwin*)
902         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
903
904 # Add a system specific charset module.
905         default_shared_modules="$default_shared_modules charset_macosxfs"
906
907         ;;
908     *hurd*)
909         AC_MSG_CHECKING([for LFS support])
910         old_CPPFLAGS="$CPPFLAGS"
911         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
912         AC_TRY_RUN([
913 #include <unistd.h>
914 main () {
915 #if _LFS64_LARGEFILE == 1
916 exit(0);
917 #else
918 exit(1);
919 #endif
920 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
921         CPPFLAGS="$old_CPPFLAGS"
922         if test x$GLIBC_LFS_SUPPORT = xyes ; then
923           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
924                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
925           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
926         fi
927       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
928     ;;
929
930 esac
931
932 AC_LIBREPLACE_BROKEN_CHECKS
933
934 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
935
936 LIBREPLACE_OBJS=""
937 for obj in ${LIBREPLACEOBJ}; do
938         LIBREPLACE_OBJS="${LIBREPLACE_OBJS} ${LIBREPLACE_DIR}/${obj}"
939 done
940 AC_SUBST(LIBREPLACE_OBJS)
941
942 # add -ldl to the global LIBS
943 LIBS="${LIBS} ${LIBDL}"
944
945 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)
946 AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h memory.h alloca.h)
947 AC_CHECK_HEADERS(limits.h float.h pthread.h)
948 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
949 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h)
950 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h sys/socket.h)
951 AC_CHECK_HEADERS(sys/un.h ifaddrs.h)
952 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
953 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h)
954 AC_CHECK_HEADERS(sys/sysmacros.h)
955 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
956 AC_CHECK_HEADERS(langinfo.h locale.h)
957 AC_CHECK_HEADERS(xfs/libxfs.h)
958
959 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
960 #if HAVE_RPC_RPC_H
961 #include <rpc/rpc.h>
962 #endif
963 ]])
964
965 ## These fail to compile on IRIX so just check for their presence
966 AC_CHECK_HEADERS(sys/mode.h,,,)
967
968 # Look for Darwin headers
969 old_CPPFLAGS="$CPPFLAGS"
970 CPPFLAGS="-Iinclude $CPPFLAGS"
971 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
972 CPPFLAGS="$old_CPPFLAGS"
973
974 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
975 # subdirectory of headers.
976 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
977
978 # check for linux on amd64 since valgrind is not quite there yet
979 case "$host_os" in
980         *linux*)
981                 case "$UNAME_P" in
982                         *x86_64*)
983                                 AC_DEFINE(HAVE_64BIT_LINUX,1,[Whether we are running on 64bit linux])
984                                 ;;
985                 esac
986                 ;;
987 esac
988
989
990 #
991 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
992 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
993 #
994 case "$host_os" in
995     *hpux*)
996                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
997                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
998                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
999                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
1000                 fi
1001         ;;
1002 esac
1003 AC_CHECK_HEADERS(shadow.h)
1004 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
1005 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
1006
1007 AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
1008 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
1009
1010 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
1011
1012 # For experimental utmp support (lastlog on some BSD-like systems)
1013 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
1014
1015 AC_CHECK_SIZEOF(int,cross)
1016 AC_CHECK_SIZEOF(long,cross)
1017 AC_CHECK_SIZEOF(long long,cross)
1018 AC_CHECK_SIZEOF(short,cross)
1019
1020 AC_C_CONST
1021 AC_C_INLINE
1022 AC_C_BIGENDIAN
1023 AC_C_CHAR_UNSIGNED
1024
1025 AC_TYPE_SIGNAL
1026 AC_TYPE_UID_T
1027 AC_TYPE_MODE_T
1028 AC_TYPE_OFF_T
1029 AC_TYPE_SIZE_T
1030 AC_TYPE_PID_T
1031 AC_STRUCT_ST_RDEV
1032 AC_DIRENT_D_OFF
1033 AC_CHECK_TYPE(ino_t,unsigned)
1034 AC_CHECK_TYPE(loff_t,off_t)
1035 AC_CHECK_TYPE(offset_t,loff_t)
1036 AC_CHECK_TYPE(ssize_t, int)
1037 AC_CHECK_TYPE(wchar_t, unsigned short)
1038 AC_CHECK_TYPE(comparison_fn_t,
1039 [AC_DEFINE(HAVE_COMPARISON_FN_T, 1,[Whether or not we have comparison_fn_t])])
1040
1041 ############################################
1042 # for cups support we need libcups, and a handful of header files
1043
1044 AC_ARG_ENABLE(cups,
1045 [  --enable-cups           Turn on CUPS support (default=auto)])
1046
1047 if test x$enable_cups != xno; then
1048         AC_PATH_PROG(CUPS_CONFIG, cups-config)
1049
1050         if test "x$CUPS_CONFIG" != x; then
1051                 AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
1052                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
1053                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
1054                 PRINT_LIBS="$PRINT_LIBS `$CUPS_CONFIG --libs`"
1055         elif test x"$enable_cups" = x"yes"; then
1056                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
1057         fi
1058 fi
1059
1060 AC_ARG_ENABLE(iprint,
1061 [  --enable-iprint         Turn on iPrint support (default=yes if cups is yes)])
1062
1063 if test x$enable_iprint != xno; then
1064         if test "x$CUPS_CONFIG" != x; then
1065                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
1066         elif test x"$enable_iprint" = x"yes"; then
1067                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
1068         fi
1069 fi
1070
1071 ############################################
1072 # check if the compiler will optimize out function calls
1073 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
1074     AC_TRY_LINK([
1075 #include <stdio.h>],
1076 [
1077                 if (0) {
1078                    this_function_does_not_exist();
1079                 } else {
1080                   return 1;
1081                 }
1082
1083 ],
1084         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
1085 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
1086    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
1087 fi
1088
1089 ############################################
1090 # check for unix domain sockets
1091 AC_CACHE_CHECK([for unix domain sockets],samba_cv_unixsocket, [
1092     AC_TRY_COMPILE([
1093 #include <sys/types.h>
1094 #include <stdlib.h>
1095 #include <stddef.h>
1096 #include <sys/socket.h>
1097 #include <sys/un.h>],
1098 [
1099   struct sockaddr_un sunaddr;
1100   sunaddr.sun_family = AF_UNIX;
1101 ],
1102         samba_cv_unixsocket=yes,samba_cv_unixsocket=no)])
1103 if test x"$samba_cv_unixsocket" = x"yes"; then
1104    AC_DEFINE(HAVE_UNIXSOCKET,1,[If we need to build with unixscoket support])
1105 fi
1106
1107
1108 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
1109     AC_TRY_COMPILE([
1110 #include <sys/types.h>
1111 #if STDC_HEADERS
1112 #include <stdlib.h>
1113 #include <stddef.h>
1114 #endif
1115 #include <signal.h>],[sig_atomic_t i = 0],
1116         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
1117 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
1118    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
1119 fi
1120
1121 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
1122     AC_TRY_COMPILE([
1123 #include <sys/types.h>
1124 #if STDC_HEADERS
1125 #include <stdlib.h>
1126 #include <stddef.h>
1127 #endif
1128 #if TIME_WITH_SYS_TIME
1129 # include <sys/time.h>
1130 # include <time.h>
1131 #else
1132 # if HAVE_SYS_TIME_H
1133 #  include <sys/time.h>
1134 # else
1135 #  include <time.h>
1136 # endif
1137 #endif
1138 ],[struct timespec ts;],
1139         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
1140 if test x"$samba_cv_struct_timespec" = x"yes"; then
1141    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
1142 fi
1143
1144 # stupid headers have the functions but no declaration. grrrr.
1145 AC_HAVE_DECL(errno, [#include <errno.h>])
1146 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
1147 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
1148 AC_HAVE_DECL(asprintf, [#include <stdio.h>])
1149 AC_HAVE_DECL(vasprintf, [#include <stdio.h>])
1150 AC_HAVE_DECL(vsnprintf, [#include <stdio.h>])
1151 AC_HAVE_DECL(snprintf, [#include <stdio.h>])
1152
1153 # and glibc has setresuid under linux but the function does
1154 # nothing until kernel 2.1.44! very dumb.
1155 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
1156     AC_TRY_RUN([#include <errno.h>
1157 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
1158         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
1159 if test x"$samba_cv_have_setresuid" = x"yes"; then
1160     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
1161 fi
1162
1163 # Do the same check for setresguid...
1164 #
1165 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
1166     AC_TRY_RUN([#include <unistd.h>
1167 #include <errno.h>
1168 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
1169         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
1170 if test x"$samba_cv_have_setresgid" = x"yes"; then
1171     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
1172 fi
1173
1174 AC_FUNC_MEMCMP
1175
1176 ###############################################
1177 # Readline included by default unless explicitly asked not to
1178 test "${with_readline+set}" != "set" && with_readline=yes
1179
1180 # test for where we get readline() from
1181 AC_MSG_CHECKING(whether to use readline)
1182 AC_ARG_WITH(readline,
1183 [  --with-readline[=DIR]     Look for readline include/libs in DIR (default=auto) ],
1184 [  case "$with_readline" in
1185   yes)
1186     AC_MSG_RESULT(yes)
1187
1188     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1189     AC_CHECK_HEADERS(readline/history.h)
1190
1191     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1192       for termlib in ncurses curses termcap terminfo termlib tinfo; do
1193        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1194       done
1195       AC_CHECK_LIB(readline, rl_callback_handler_install,
1196        [TERMLIBS="-lreadline $TERMLIBS"
1197        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1198        break], [TERMLIBS=], $TERMLIBS)])
1199     ;;
1200   no)
1201     AC_MSG_RESULT(no)
1202     ;;
1203   *)
1204     AC_MSG_RESULT(yes)
1205
1206     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
1207     # alternate readline path
1208     _ldflags=${LDFLAGS}
1209     _cppflags=${CPPFLAGS}
1210
1211     # Add additional search path
1212     LDFLAGS="-L$with_readline/lib $LDFLAGS"
1213     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1214
1215     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1216     AC_CHECK_HEADERS(readline/history.h)
1217
1218     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1219       for termlib in ncurses curses termcap terminfo termlib; do
1220        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1221       done
1222       AC_CHECK_LIB(readline, rl_callback_handler_install,
1223        [TERMLDFLAGS="-L$with_readline/lib"
1224        TERMCPPFLAGS="-I$with_readline/include"
1225        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1226        TERMLIBS="-lreadline $TERMLIBS"
1227        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1228        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
1229
1230     LDFLAGS=$_ldflags
1231     ;;
1232   esac],
1233   AC_MSG_RESULT(no)
1234 )
1235 AC_SUBST(TERMLIBS)
1236 AC_SUBST(TERMLDFLAGS)
1237
1238 # The readline API changed slightly from readline3 to readline4, so
1239 # code will generate warnings on one of them unless we have a few
1240 # special cases.
1241 AC_CHECK_LIB(readline, rl_completion_matches,
1242              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
1243                         [Do we have rl_completion_matches?])],
1244              [],
1245              [$TERMLIBS])
1246
1247 # not all readline libs have rl_event_hook or history_list
1248 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1249 AC_CHECK_LIB(readline, history_list,
1250              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1251              [],
1252              [$TERMLIBS])
1253
1254 # The following test taken from the cvs sources
1255 # If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
1256 # The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
1257 # libsocket.so which has a bad implementation of gethostbyname (it
1258 # only looks in /etc/hosts), so we only look for -lsocket if we need
1259 # it.
1260 AC_CHECK_FUNCS(connect)
1261 if test x"$ac_cv_func_connect" = x"no"; then
1262     case "$LIBS" in
1263     *-lnsl*) ;;
1264     *) AC_CHECK_LIB(nsl_s, connect) ;;
1265     esac
1266     case "$LIBS" in
1267     *-lnsl*) ;;
1268     *) AC_CHECK_LIB(nsl, connect) ;;
1269     esac
1270     case "$LIBS" in
1271     *-lsocket*) ;;
1272     *) AC_CHECK_LIB(socket, connect) ;;
1273     esac
1274     case "$LIBS" in
1275     *-linet*) ;;
1276     *) AC_CHECK_LIB(inet, connect) ;;
1277     esac
1278     dnl We can't just call AC_CHECK_FUNCS(connect) here, because the value
1279     dnl has been cached.
1280     if test x"$ac_cv_lib_socket_connect" = x"yes" ||
1281        test x"$ac_cv_lib_inet_connect" = x"yes"; then
1282         # ac_cv_func_connect=yes
1283         # don't!  it would cause AC_CHECK_FUNC to succeed next time configure is run
1284         AC_DEFINE(HAVE_CONNECT,1,[Whether the system has connect()])
1285     fi
1286 fi
1287
1288 ###############################################
1289 # test for where we get yp_get_default_domain() from
1290 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1291 AC_CHECK_FUNCS(yp_get_default_domain)
1292
1293 # Check if we have execl, if not we need to compile smbrun.
1294 AC_CHECK_FUNCS(execl)
1295 if test x"$ac_cv_func_execl" = x"no"; then
1296     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1297 fi
1298
1299 AC_CHECK_FUNCS(waitpid getcwd strdup strndup strnlen strerror chown fchown lchown chmod fchmod chroot link mknod mknod64)
1300 AC_CHECK_FUNCS(strtol strtoll strtoul strtoull strtouq __strtoull)
1301 AC_CHECK_FUNCS(fstat strchr utime utimes chflags)
1302 AC_CHECK_FUNCS(getrlimit fsync fdatasync memset strlcpy strlcat setpgid)
1303 AC_CHECK_FUNCS(memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid)
1304 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1305 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
1306 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate chsize stat64 fstat64)
1307 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64)
1308 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
1309 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1310 AC_CHECK_FUNCS(getpwent_r)
1311 AC_CHECK_FUNCS(getdents getdents64)
1312 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
1313 AC_CHECK_FUNCS(syslog vsyslog timegm)
1314 AC_CHECK_FUNCS(setlocale nl_langinfo)
1315 AC_CHECK_FUNCS(nanosleep)
1316 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1317 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1318 AC_CHECK_HEADERS(sys/mman.h)
1319 # setbuffer, shmget, shm_open are needed for smbtorture
1320 AC_CHECK_FUNCS(setbuffer shmget shm_open)
1321
1322 # Find a method of generating a stack trace
1323 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1324 AC_CHECK_FUNCS(backtrace_symbols)
1325 AC_CHECK_LIB(exc, trace_back_stack)
1326
1327 echo -n "checking for GPFS GPL libs... "
1328 save_LIBS="$LIBS"
1329 LIBS="$LIBS -lgpfs_gpl"
1330 AC_TRY_LINK([#include <gpfs_gpl.h>],
1331           [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
1332           samba_cv_HAVE_GPFS=yes,
1333           samba_cv_HAVE_GPFS=no)
1334 echo $samba_cv_HAVE_GPFS
1335 if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
1336     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
1337     default_shared_modules="$default_shared_modules vfs_gpfs"
1338 fi
1339 LIBS="$save_LIBS"
1340
1341 # Note that all the libunwind symbols in the API are defined to internal
1342 # platform-specific version, so we must include libunwind.h before checking
1343 # any of them.
1344 AC_MSG_CHECKING([for libunwind])
1345 save_LIBS=$LIBS
1346
1347 UNWIND_ARCH="unknown"
1348 if test x"$UNAME_I" != x"unknown"; then
1349         UNWIND_ARCH="$UNAME_I"
1350 elif test x"$UNAME_M" != x"unknown"; then
1351         UNWIND_ARCH="$UNAME_M"
1352 elif test x"$UNAME_P" != x"unknown"; then
1353         UNWIND_ARCH="$UNAME_P"
1354 fi
1355
1356 case "$UNWIND_ARCH" in
1357         unknown)
1358                 # This probably won't link without
1359                 # the platform-specific libunwind.
1360                 LIBS="$LIBS -lunwind"
1361                 ;;
1362         i386|i586|i686)
1363                 # Add the platform-specific libunwind module.
1364                 LIBS="$LIBS -lunwind -lunwind-x86"
1365                 ;;
1366         *)
1367                 # Add the platform-specific libunwind module.
1368                 # based on uname -i, uname -m or uname -p
1369                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1370                 ;;
1371 esac
1372
1373 AC_TRY_LINK(
1374     [
1375 #ifdef HAVE_LIBUNWIND_H
1376 #include <libunwind.h>
1377 #endif
1378     ],
1379     [
1380         unw_context_t ctx; unw_cursor_t cur;
1381         char buf[256]; unw_word_t off;
1382         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1383         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1384     ],
1385     [
1386         AC_MSG_RESULT(yes)
1387         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1388
1389         # If we have libunwind, test whether we also have libunwind-ptrace
1390         # which would let us unwind arbitrary processes.
1391         save_LIBS=$LIBS
1392         AC_CHECK_HEADERS(libunwind-ptrace.h)
1393         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1394             [
1395                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1396                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1397                     [Whether libunwind-ptrace.a is available.])
1398             ],
1399             [ LIBUNWIND_PTRACE="" ])
1400
1401         LIBS=$save_LIBS
1402     ],
1403     [
1404         AC_MSG_RESULT(no)
1405         LIBS=$save_LIBS
1406     ])
1407
1408 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1409 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1410     AC_CHECK_HEADERS(sys/ptrace.h)
1411     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1412     AC_TRY_LINK(
1413             [
1414 #if HAVE_SYS_TYPES_H
1415 #include <sys/types.h>
1416 #endif
1417 #if HAVE_SYS_PTRACE_H
1418 #include <sys/ptrace.h>
1419 #endif
1420             ],
1421             [
1422                 int main(int argc, const char ** argv)
1423                 {
1424                         pid_t me = (pid_t)-1;
1425                         ptrace(PTRACE_ATTACH, me, 0, 0);
1426                         ptrace(PTRACE_DETACH, me, 0, 0);
1427                         return 0;
1428                 }
1429             ],
1430             [
1431                 AC_MSG_RESULT(yes)
1432                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1433                     [Whether the Linux ptrace(2) interface is available.])
1434             ],
1435             [
1436                 AC_MSG_RESULT(no)
1437                 LIBUNWIND_PTRACE=""
1438             ])
1439 fi
1440
1441 AC_SUBST(LIBUNWIND_PTRACE)
1442
1443 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1444 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1445 AC_CHECK_FUNCS(__getcwd _getcwd)
1446 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1447 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1448 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1449 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1450 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1451 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1452 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1453 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1454 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1455 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1456 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1457 AC_CHECK_FUNCS(prctl)
1458
1459 AC_TRY_COMPILE([
1460 #ifdef HAVE_SYS_PRCTL_H
1461 #include <sys/prctl.h>
1462 #endif
1463 ],
1464 [int i; i = prtcl(0); ],
1465 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1466
1467 #
1468 #
1469 #
1470 case "$host_os" in
1471     *linux*)
1472        # glibc <= 2.3.2 has a broken getgrouplist
1473        AC_TRY_RUN([
1474 #include <unistd.h>
1475 #include <sys/utsname.h>
1476 main() {
1477        /* glibc up to 2.3 has a broken getgrouplist */
1478 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1479        int libc_major = __GLIBC__;
1480        int libc_minor = __GLIBC_MINOR__;
1481
1482        if (libc_major < 2)
1483               exit(1);
1484        if ((libc_major == 2) && (libc_minor <= 3))
1485               exit(1);
1486 #endif
1487        exit(0);
1488 }
1489 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1490        if test x"$linux_getgrouplist_ok" = x"yes"; then
1491           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1492        fi
1493        ;;
1494     *)
1495        AC_CHECK_FUNCS(getgrouplist)
1496        ;;
1497 esac
1498
1499 #
1500 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1501 #
1502
1503 if test x$ac_cv_func_stat64 = xno ; then
1504   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1505   AC_TRY_LINK([
1506 #if defined(HAVE_UNISTD_H)
1507 #include <unistd.h>
1508 #endif
1509 #include <sys/stat.h>
1510 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1511   AC_MSG_RESULT([$ac_cv_func_stat64])
1512   if test x$ac_cv_func_stat64 = xyes ; then
1513     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1514   fi
1515 fi
1516
1517 if test x$ac_cv_func_lstat64 = xno ; then
1518   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1519   AC_TRY_LINK([
1520 #if defined(HAVE_UNISTD_H)
1521 #include <unistd.h>
1522 #endif
1523 #include <sys/stat.h>
1524 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1525   AC_MSG_RESULT([$ac_cv_func_lstat64])
1526   if test x$ac_cv_func_lstat64 = xyes ; then
1527     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1528   fi
1529 fi
1530
1531 if test x$ac_cv_func_fstat64 = xno ; then
1532   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1533   AC_TRY_LINK([
1534 #if defined(HAVE_UNISTD_H)
1535 #include <unistd.h>
1536 #endif
1537 #include <sys/stat.h>
1538 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1539   AC_MSG_RESULT([$ac_cv_func_fstat64])
1540   if test x$ac_cv_func_fstat64 = xyes ; then
1541     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1542   fi
1543 fi
1544
1545 #################################################
1546 # Check whether struct stat has timestamps with sub-second resolution.
1547 # At least IRIX and Solaris have these.
1548 #
1549 # We check that
1550 #       all of st_mtim, st_atim and st_ctim exist
1551 #       all of the members are in fact of type struct timespec
1552 #
1553 # There is some conflicting standards weirdness about whether we should use
1554 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1555 # prefer struct timespec.
1556
1557 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_stat_hires,
1558     [
1559         AC_TRY_COMPILE(
1560             [
1561 #if TIME_WITH_SYS_TIME
1562 # include <sys/time.h>
1563 # include <time.h>
1564 #else
1565 # if HAVE_SYS_TIME_H
1566 #  include <sys/time.h>
1567 # else
1568 #  include <time.h>
1569 # endif
1570 #endif
1571 #ifdef HAVE_SYS_STAT_H
1572 #include <sys/stat.h>
1573 #endif
1574             ],
1575             [
1576                 struct timespec t;
1577                 struct stat s = {0};
1578                 t.tv_sec = s.st_mtim.tv_sec;
1579                 t.tv_nsec = s.st_mtim.tv_nsec;
1580                 t.tv_sec = s.st_ctim.tv_sec;
1581                 t.tv_nsec = s.st_ctim.tv_nsec;
1582                 t.tv_sec = s.st_atim.tv_sec;
1583                 t.tv_nsec = s.st_atim.tv_nsec;
1584             ],
1585             samba_stat_hires=yes, samba_stat_hires=no)
1586     ])
1587
1588 if test x"$samba_stat_hires" = x"yes" ; then
1589     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1590     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1591     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1592     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1593             [whether struct stat has sub-second timestamps])
1594 fi
1595
1596 AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec], samba_stat_hires_notimespec,
1597     [
1598         AC_TRY_COMPILE(
1599             [
1600 #if TIME_WITH_SYS_TIME
1601 # include <sys/time.h>
1602 # include <time.h>
1603 #else
1604 # if HAVE_SYS_TIME_H
1605 #  include <sys/time.h>
1606 # else
1607 #  include <time.h>
1608 # endif
1609 #endif
1610 #ifdef HAVE_SYS_STAT_H
1611 #include <sys/stat.h>
1612 #endif
1613             ],
1614             [
1615                 struct timespec t;
1616                 struct stat s = {0};
1617                 t.tv_sec = s.st_mtime;
1618                 t.tv_nsec = s.st_mtimensec;
1619                 t.tv_sec = s.st_ctime;
1620                 t.tv_nsec = s.st_ctimensec;
1621                 t.tv_sec = s.st_atime;
1622                 t.tv_nsec = s.st_atimensec;
1623             ],
1624             samba_stat_hires=yes, samba_stat_hires=no)
1625     ])
1626
1627 if test x"$samba_stat_hires_notimespec" = x"yes" ; then
1628     AC_DEFINE(HAVE_STAT_ST_MTIMENSEC, 1, [whether struct stat contains st_mtimensec])
1629     AC_DEFINE(HAVE_STAT_ST_ATIMENSEC, 1, [whether struct stat contains st_atimensec])
1630     AC_DEFINE(HAVE_STAT_ST_CTIMENSEC, 1, [whether struct stat contains st_ctimensec])
1631     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1632             [whether struct stat has sub-second timestamps without struct timespec])
1633 fi
1634
1635 #####################################
1636 # needed for SRV lookups
1637 AC_CHECK_LIB(resolv, dn_expand)
1638 AC_CHECK_LIB(resolv, _dn_expand)
1639 AC_CHECK_LIB(resolv, __dn_expand)
1640
1641 #
1642 # Check for the functions putprpwnam, set_auth_parameters,
1643 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1644 # Needed for OSF1 and HPUX.
1645 #
1646
1647 AC_LIBTESTFUNC(security, putprpwnam)
1648 AC_LIBTESTFUNC(sec, putprpwnam)
1649
1650 AC_LIBTESTFUNC(security, set_auth_parameters)
1651 AC_LIBTESTFUNC(sec, set_auth_parameters)
1652
1653 # UnixWare 7.x has its getspnam in -lgen
1654 AC_LIBTESTFUNC(gen, getspnam)
1655
1656 AC_LIBTESTFUNC(security, getspnam)
1657 AC_LIBTESTFUNC(sec, getspnam)
1658
1659 AC_LIBTESTFUNC(security, bigcrypt)
1660 AC_LIBTESTFUNC(sec, bigcrypt)
1661
1662 AC_LIBTESTFUNC(security, getprpwnam)
1663 AC_LIBTESTFUNC(sec, getprpwnam)
1664
1665 AC_CHECK_FUNCS(strsignal)
1666
1667 ############################################
1668 # Check if we have libattr
1669 case "$host_os" in
1670   *osf*)
1671         AC_SEARCH_LIBS(getproplist, [proplist])
1672         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1673         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1674         AC_CHECK_FUNCS(sizeof_proplist_entry)
1675   ;;
1676   *)
1677         AC_SEARCH_LIBS(getxattr, [attr])
1678         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1679         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1680         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1681         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1682         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1683         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1684         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1685   ;;
1686 esac
1687
1688 ########################################################
1689 # Check if attropen() is present if this is Solaris
1690 case "$host_os" in
1691   *solaris*)
1692         AC_CHECK_FUNCS(attropen)
1693   ;;
1694 esac
1695
1696 ########################################################
1697 # Do xattr functions take additional options like on Darwin?
1698 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1699         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1700                 old_LIBS=$LIBS
1701                 LIBS="$LIBS $ACL_LIBS"
1702                 AC_TRY_COMPILE([
1703                         #include <sys/types.h>
1704                         #if HAVE_ATTR_XATTR_H
1705                         #include <attr/xattr.h>
1706                         #elif HAVE_SYS_XATTR_H
1707                         #include <sys/xattr.h>
1708                         #endif
1709                 ],[
1710                         getxattr(0, 0, 0, 0, 0, 0);
1711                 ],
1712                 [smb_attr_cv_xattr_add_opt=yes],
1713                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1714         ])
1715         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1716                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1717         fi
1718 fi
1719
1720 # Check if we have extattr
1721 case "$host_os" in
1722   *freebsd4* | *dragonfly* )
1723     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1724     ;;
1725   *)
1726     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1727     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1728     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1729     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1730     ;;
1731 esac
1732
1733 # Set defaults
1734 PIE_CFLAGS=""
1735 PIE_LDFLAGS=""
1736 AC_ARG_ENABLE(pie, [  --enable-pie            Turn on pie support if available (default=yes)])
1737
1738 if test "x$enable_pie" != xno
1739 then
1740         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1741         [
1742                 cat > conftest.c <<EOF
1743 int foo;
1744 main () { return 0;}
1745 EOF
1746                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1747                 then
1748                         samba_cv_fpie=yes
1749                 else
1750                         samba_cv_fpie=no
1751                 fi
1752                 rm -f conftest*
1753         ])
1754         if test x"${samba_cv_fpie}" = x"yes"
1755         then
1756                 PIE_CFLAGS="-fPIE"
1757                 PIE_LDFLAGS="-pie"
1758         fi
1759 fi
1760
1761 # Assume non-shared by default and override below
1762 BLDSHARED="false"
1763
1764 # these are the defaults, good for lots of systems
1765 HOST_OS="$host_os"
1766 LDSHFLAGS="-shared"
1767 MODULE_EXPORTS=""
1768 SONAMEFLAG="#"
1769 SHLD="\${CC} \${CFLAGS}"
1770 PICFLAG="${PIE_CFLAGS}"
1771 SHLIBEXT="so"
1772 DSO_EXPORTS=""
1773
1774 # this bit needs to be modified for each OS that supports share libs
1775 # You need to specify how to create a shared library and
1776   # how to compile C code to produce PIC object files
1777
1778   AC_MSG_CHECKING([ability to build shared libraries])
1779
1780   # and these are for particular systems
1781   case "$host_os" in
1782                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1783                         BLDSHARED="true"
1784                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1785                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined"
1786                         else
1787                                 LDSHFLAGS="-shared -Wl,-Bsymbolic"
1788                         fi
1789                         DYNEXP="-Wl,--export-dynamic"
1790                         PICFLAG="-fPIC"
1791                         SONAMEFLAG="-Wl,-soname="
1792                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1793                         ;;
1794                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1795                         BLDSHARED="true"
1796                         LDSHFLAGS="-G"
1797                         SONAMEFLAG="-h "
1798                         if test "${GCC}" = "yes"; then
1799                                 PICFLAG="-fPIC"
1800                                 SONAMEFLAG="-Wl,-soname="
1801                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1802                                         DYNEXP="-Wl,-E"
1803                                 fi
1804                         else
1805                                 PICFLAG="-KPIC"
1806                                 ## ${CFLAGS} added for building 64-bit shared
1807                                 ## libs using Sun's Compiler
1808                                 LDSHFLAGS="-G \${CFLAGS}"
1809                         fi
1810                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1811                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1812                         ;;
1813                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1814                         BLDSHARED="true"
1815                         LDSHFLAGS="-G"
1816                         SONAMEFLAG="-Wl,-h,"
1817                         PICFLAG="-KPIC"   # Is this correct for SunOS
1818                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1819                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1820                         ;;
1821                 *netbsd* | *freebsd* | *dragonfly* )
1822                         BLDSHARED="true"
1823                         LDSHFLAGS="-shared"
1824                         DYNEXP="-Wl,--export-dynamic"
1825                         SONAMEFLAG="-Wl,-soname,"
1826                         PICFLAG="-fPIC -DPIC"
1827                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1828                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1829                         ;;
1830                 *openbsd*)  BLDSHARED="true"
1831                         LDSHFLAGS="-shared"
1832                         DYNEXP="-Wl,-Bdynamic"
1833                         SONAMEFLAG="-Wl,-soname,"
1834                         PICFLAG="-fPIC"
1835                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1836                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1837                         ;;
1838                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1839                         case "$host_os" in
1840                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1841                         ;;
1842                         esac
1843                         BLDSHARED="true"
1844                         LDSHFLAGS="-set_version sgi1.0 -shared"
1845                         SONAMEFLAG="-soname "
1846                         SHLD="\${LD}"
1847                         if test "${GCC}" = "yes"; then
1848                                 PICFLAG="-fPIC"
1849                         else
1850                                 PICFLAG="-KPIC"
1851                         fi
1852                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1853                         ;;
1854                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1855                         BLDSHARED="true"
1856                         LDSHFLAGS="-Wl,-G,-bexpall,-bbigtoc"
1857                         DYNEXP="-Wl,-brtl,-bexpall,-bbigtoc"
1858                         PICFLAG="-O2"
1859                         # as AIX code is always position independent...
1860                         # .po will just create compile warnings, use po.o:
1861                         if test "${GCC}" != "yes"; then
1862                                 ## for funky AIX compiler using strncpy()
1863                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1864                         fi
1865
1866                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1867                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1868                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1869                         ;;
1870                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1871                         # Use special PIC flags for the native HP-UX compiler.
1872                                 BLDSHARED="true"
1873                                 SHLD="cc"
1874                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1875                                 SONAMEFLAG="-Wl,+h "
1876                                 PICFLAG="+z"
1877                         if test "${GCC}" = "yes"; then
1878                                 PICFLAG="-fPIC"
1879                         else
1880                                 PICFLAG="+z +ESnolit"
1881                         fi
1882                         if test "$host_cpu" = "ia64"; then
1883                                 SHLIBEXT="so"
1884                               PICFLAG="+z"
1885                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1886                         else
1887                                 SHLIBEXT="sl"
1888                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1889                         fi
1890                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1891                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1892                         ;;
1893                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1894                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1895                         ;;
1896                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1897                         BLDSHARED="true"
1898                         LDSHFLAGS="-shared"
1899                         SONAMEFLAG="-Wl,-soname,"
1900                         PICFLAG="-fPIC"
1901                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1902                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1903                         ;;
1904                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1905                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1906                         ;;
1907                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1908                         BLDSHARED="true"
1909                         LDSHFLAGS="-shared"
1910                         SONAMEFLAG="-Wl,-soname,"
1911                         PICFLAG="-KPIC"
1912                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1913                         ;;
1914                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1915                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1916                         ;;
1917                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1918                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1919                         ;;
1920                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1921                         case "$host" in
1922                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1923                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1924                                         fi
1925                                         LDSHFLAGS="-G"
1926                                         DYNEXP="-Bexport"
1927                                 ;;
1928                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1929                         esac
1930                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1931                         ;;
1932
1933                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1934                         if [ test "$GCC" != yes ]; then
1935                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1936                         fi
1937                         LDSHFLAGS="-G"
1938                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1939                         ;;
1940                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1941                         BLDSHARED="false"
1942                         LDSHFLAGS=""
1943                         ;;
1944
1945                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1946                         BLDSHARED="true"
1947                         LDSHFLAGS="-bundle -flat_namespace -undefined suppress"
1948                         SHLIBEXT="dylib"
1949                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1950                         SHLIBEXT="dylib"
1951                         # Since gcc doesn't fail on unrecognised options, the
1952                         # PIE test incorrectly succeeds. Darwin gcc does not
1953                         # actually support the PIE stuff.
1954                         PIE_LDFLAGS=
1955                         PIE_CFLAGS=
1956                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1957                         ;;
1958
1959                 *)
1960                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1961                         ;;
1962   esac
1963
1964 if test "$enable_shared" != "yes"; then
1965         BLDSHARED=false
1966 fi
1967
1968 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1969         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1970 fi
1971
1972 AC_MSG_RESULT($BLDSHARED)
1973
1974 AC_MSG_CHECKING([LDFLAGS])
1975 AC_MSG_RESULT([$LDFLAGS])
1976 AC_MSG_CHECKING([DYNEXP])
1977 AC_MSG_RESULT([$DYNEXP])
1978
1979 #######################################################
1980 # test whether building a shared library actually works
1981 if test $BLDSHARED = true; then
1982
1983 AC_MSG_CHECKING([SHLD])
1984 AC_MSG_RESULT([$SHLD])
1985 AC_MSG_CHECKING([LDSHFLAGS])
1986 AC_MSG_RESULT([$LDSHFLAGS])
1987
1988 AC_MSG_CHECKING([SHLIBEXT])
1989 AC_MSG_RESULT([$SHLIBEXT])
1990 AC_MSG_CHECKING([SONAMEFLAG])
1991 AC_MSG_RESULT([$SONAMEFLAG])
1992
1993 AC_MSG_CHECKING([PICFLAG])
1994 AC_MSG_RESULT([$PICFLAG])
1995
1996 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1997 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1998
1999 AC_CACHE_CHECK([whether building shared libraries actually works],
2000                [ac_cv_shlib_works],[
2001    # try building a trivial shared library
2002    ac_cv_shlib_works=no
2003    # The $SHLD and $LDSHFLAGS variables may contain references to other
2004    # variables so they need to be eval'ed.
2005    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
2006         shlib.o ${srcdir-.}/tests/shlib.c && \
2007    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
2008         shlib.o && ac_cv_shlib_works=yes
2009    rm -f "shlib.$SHLIBEXT" shlib.o
2010
2011 ])
2012 if test $ac_cv_shlib_works = no; then
2013    BLDSHARED=false
2014 fi
2015 fi
2016
2017 if test x"$BLDSHARED" != x"true"; then
2018         LDSHFLAGS="shared-libraries-disabled"
2019         SONAMEFLAG="shared-libraries-disabled"
2020         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
2021         SHLD="shared-libraries-disabled"
2022         PICFLAG="${PIE_CFLAGS}"
2023         SHLIBEXT="shared_libraries_disabled"
2024 fi
2025
2026 AC_MSG_CHECKING([used PICFLAG])
2027 AC_MSG_RESULT([$PICFLAG])
2028
2029 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
2030
2031 ################
2032
2033 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
2034 AC_TRY_RUN([#include <stdio.h>
2035 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
2036 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
2037 if test x"$samba_cv_have_longlong" = x"yes"; then
2038     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
2039     AC_CHECK_TYPE(intptr_t, unsigned long long)
2040 else
2041     AC_CHECK_TYPE(intptr_t, unsigned long)
2042 fi
2043
2044 #
2045 # Check if the compiler supports the LL prefix on long long integers.
2046 # AIX needs this.
2047
2048 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
2049     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
2050         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
2051 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
2052    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
2053 fi
2054
2055
2056 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
2057 AC_TRY_RUN([#include <time.h>
2058 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
2059 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
2060 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
2061     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
2062 fi
2063
2064 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2065 AC_TRY_RUN([#include <stdio.h>
2066 #include <sys/stat.h>
2067 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
2068 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2069 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
2070     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
2071 fi
2072
2073 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
2074 AC_TRY_RUN([
2075 #if defined(HAVE_UNISTD_H)
2076 #include <unistd.h>
2077 #endif
2078 #include <stdio.h>
2079 #include <sys/stat.h>
2080 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2081 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
2082 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
2083     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
2084 fi
2085
2086 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2087 AC_TRY_RUN([
2088 #if defined(HAVE_UNISTD_H)
2089 #include <unistd.h>
2090 #endif
2091 #include <stdio.h>
2092 #include <sys/stat.h>
2093 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
2094 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2095 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2096     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2097 fi
2098
2099 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
2100 AC_TRY_RUN([
2101 #if defined(HAVE_UNISTD_H)
2102 #include <unistd.h>
2103 #endif
2104 #include <stdio.h>
2105 #include <sys/stat.h>
2106 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2107 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
2108 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
2109     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
2110 fi
2111
2112 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2113 AC_TRY_RUN([
2114 #if defined(HAVE_UNISTD_H)
2115 #include <unistd.h>
2116 #endif
2117 #include <stdio.h>
2118 #include <sys/stat.h>
2119 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2120 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2121 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2122     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2123 fi
2124
2125 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2126 AC_TRY_RUN([
2127 #if defined(HAVE_UNISTD_H)
2128 #include <unistd.h>
2129 #endif
2130 #include <stdio.h>
2131 #include <sys/stat.h>
2132 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2133 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2134 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2135     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2136 fi
2137
2138 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2139 AC_TRY_COMPILE([
2140 #if defined(HAVE_UNISTD_H)
2141 #include <unistd.h>
2142 #endif
2143 #include <sys/types.h>
2144 #include <dirent.h>],
2145 [DIR64 de;],
2146 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2147 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2148     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2149 fi
2150
2151 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2152 AC_TRY_COMPILE([
2153 #if defined(HAVE_UNISTD_H)
2154 #include <unistd.h>
2155 #endif
2156 #include <sys/types.h>
2157 #include <dirent.h>],
2158 [struct dirent64 de;],
2159 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2160 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2161     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2162 fi
2163
2164 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2165 AC_TRY_RUN([
2166 #if defined(HAVE_UNISTD_H)
2167 #include <unistd.h>
2168 #endif
2169 #include <sys/types.h>
2170 main() { dev_t dev; int i = major(dev); return 0; }],
2171 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2172 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2173     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2174 fi
2175
2176 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2177 AC_TRY_RUN([
2178 #if defined(HAVE_UNISTD_H)
2179 #include <unistd.h>
2180 #endif
2181 #include <sys/types.h>
2182 main() { dev_t dev; int i = minor(dev); return 0; }],
2183 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2184 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2185     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2186 fi
2187
2188 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2189 AC_TRY_RUN([
2190 #if defined(HAVE_UNISTD_H)
2191 #include <unistd.h>
2192 #endif
2193 #include <sys/types.h>
2194 main() { dev_t dev = makedev(1,2); return 0; }],
2195 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2196 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2197     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2198 fi
2199
2200 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2201 AC_TRY_RUN([#include <stdio.h>
2202 main() { char c; c=250; exit((c > 0)?0:1); }],
2203 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2204 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2205     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2206 fi
2207
2208 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
2209 AC_TRY_COMPILE([#include <sys/types.h>
2210 #include <sys/socket.h>
2211 #include <netinet/in.h>],
2212 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
2213 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
2214 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
2215     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
2216 fi
2217
2218 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2219 AC_TRY_COMPILE([#include <sys/types.h>
2220 #include <dirent.h>
2221 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2222 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2223 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2224     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2225 fi
2226
2227 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2228 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2229 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2230 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2231     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2232 fi
2233
2234 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2235 AC_TRY_LINK([
2236 #include <sys/time.h>
2237 #include <unistd.h>], [struct timeval tv; return gettimeofday(&tv, NULL);],
2238            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,
2239            samba_cv_HAVE_GETTIMEOFDAY_TZ=no)])
2240 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2241     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday takes a tz argument])
2242 fi
2243
2244 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2245
2246     # On some systems (eg. Linux) librt can pull in libpthread. We
2247     # don't want this to happen because libpthreads changes signal delivery
2248     # semantics in ways we are not prepared for. This breaks Linux oplocks
2249     # which rely on signals.
2250
2251     AC_LIBTESTFUNC(rt, clock_gettime,
2252             [
2253                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2254                                 [Whether clock_gettime is available])
2255                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2256                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2257                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2258                         ])
2259
2260 fi
2261
2262 AC_CACHE_CHECK([for va_copy],samba_cv_HAVE_VA_COPY,[
2263 AC_TRY_LINK([#include <stdarg.h>
2264 va_list ap1,ap2;], [va_copy(ap1,ap2);],
2265 samba_cv_HAVE_VA_COPY=yes,
2266 samba_cv_HAVE_VA_COPY=no)])
2267 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
2268     AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
2269 else
2270     AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE___VA_COPY,[
2271     AC_TRY_LINK([#include <stdarg.h>
2272     va_list ap1,ap2;], [__va_copy(ap1,ap2);],
2273     samba_cv_HAVE___VA_COPY=yes,
2274     samba_cv_HAVE___VA_COPY=no)])
2275     if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
2276         AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
2277     fi
2278 fi
2279
2280 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
2281 AC_TRY_RUN([
2282 #include <sys/types.h>
2283 #include <stdarg.h>
2284 void foo(const char *format, ...) {
2285        va_list ap;
2286        int len;
2287        char buf[5];
2288
2289        va_start(ap, format);
2290        len = vsnprintf(buf, 0, format, ap);
2291        va_end(ap);
2292        if (len != 5) exit(1);
2293
2294        va_start(ap, format);
2295        len = vsnprintf(0, 0, format, ap);
2296        va_end(ap);
2297        if (len != 5) exit(1);
2298
2299        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
2300
2301        exit(0);
2302 }
2303 main() { foo("hello"); }
2304 ],
2305 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
2306 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
2307     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
2308 fi
2309
2310 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2311 AC_TRY_RUN([#include <sys/types.h>
2312 #include <dirent.h>
2313 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2314 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2315 di->d_name[0] == 0) exit(0); exit(1);} ],
2316 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2317 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2318     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2319 fi
2320
2321 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2322 AC_TRY_COMPILE([#include <sys/types.h>
2323 #include <utime.h>],
2324 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2325 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2326 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2327     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2328 fi
2329
2330 ##############
2331 # Check utmp details, but only if our OS offers utmp.h
2332 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2333 dnl  utmp and utmpx come in many flavours
2334 dnl  We need to check for many of them
2335 dnl  But we don't need to do each and every one, because our code uses
2336 dnl  mostly just the utmp (not utmpx) fields.
2337
2338 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2339
2340 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2341 AC_TRY_COMPILE([#include <sys/types.h>
2342 #include <utmp.h>],
2343 [struct utmp ut;  ut.ut_name[0] = 'a';],
2344 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2345 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2346     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2347 fi
2348
2349 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2350 AC_TRY_COMPILE([#include <sys/types.h>
2351 #include <utmp.h>],
2352 [struct utmp ut;  ut.ut_user[0] = 'a';],
2353 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2354 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2355     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2356 fi
2357
2358 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2359 AC_TRY_COMPILE([#include <sys/types.h>
2360 #include <utmp.h>],
2361 [struct utmp ut;  ut.ut_id[0] = 'a';],
2362 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2363 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2364     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2365 fi
2366
2367 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2368 AC_TRY_COMPILE([#include <sys/types.h>
2369 #include <utmp.h>],
2370 [struct utmp ut;  ut.ut_host[0] = 'a';],
2371 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2372 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2373     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2374 fi
2375
2376 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2377 AC_TRY_COMPILE([#include <sys/types.h>
2378 #include <utmp.h>],
2379 [struct utmp ut;  time_t t; ut.ut_time = t;],
2380 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2381 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2382     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2383 fi
2384
2385 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2386 AC_TRY_COMPILE([#include <sys/types.h>
2387 #include <utmp.h>],
2388 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2389 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2390 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2391     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2392 fi
2393
2394 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2395 AC_TRY_COMPILE([#include <sys/types.h>
2396 #include <utmp.h>],
2397 [struct utmp ut;  ut.ut_type = 0;],
2398 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2399 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2400     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2401 fi
2402
2403 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2404 AC_TRY_COMPILE([#include <sys/types.h>
2405 #include <utmp.h>],
2406 [struct utmp ut;  ut.ut_pid = 0;],
2407 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2408 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2409     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2410 fi
2411
2412 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2413 AC_TRY_COMPILE([#include <sys/types.h>
2414 #include <utmp.h>],
2415 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2416 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2417 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2418     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2419 fi
2420
2421 dnl Look for the IPv6 varient by preference. Many systems have both.
2422 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2423 AC_TRY_COMPILE([#include <sys/types.h>
2424 #include <utmp.h>],
2425 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2426 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2427 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2428     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2429 fi
2430
2431 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2432 AC_TRY_COMPILE([#include <sys/types.h>
2433 #include <utmp.h>],
2434 [struct utmp ut;  ut.ut_addr = 0;],
2435 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2436 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2437     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2438 fi
2439
2440 if test x$ac_cv_func_pututline = xyes ; then
2441   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2442   AC_TRY_COMPILE([#include <sys/types.h>
2443 #include <utmp.h>],
2444   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2445   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2446   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2447       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2448   fi
2449 fi
2450
2451 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2452 AC_TRY_COMPILE([#include <sys/types.h>
2453 #include <utmpx.h>],
2454 [struct utmpx ux;  ux.ut_syslen = 0;],
2455 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2456 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2457     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2458 fi
2459
2460 fi
2461 # end utmp details
2462
2463
2464 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2465 AC_ARG_WITH(libiconv,
2466 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
2467 [
2468   if test "$withval" = "no" ; then
2469     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2470   else
2471      if test "$withval" != "yes" ; then
2472         ICONV_PATH_SPEC=yes
2473         ICONV_LOOK_DIRS="$withval"
2474      fi
2475   fi
2476 ])
2477
2478 for i in $ICONV_LOOK_DIRS ; do
2479
2480     save_LIBS="$LIBS"
2481     save_LDFLAGS="$LDFLAGS"
2482     save_CPPFLAGS="$CPPFLAGS"
2483
2484     iconv_current_LIBS=""
2485     iconv_current_LDFLAGS=""
2486     iconv_current_CPPFLAGS=""
2487
2488     ICONV_FOUND="no"
2489     unset libext
2490
2491     #  This is here to handle -withval stuff for --with-libiconv
2492     #  Perhaps we should always add a -L
2493     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2494
2495     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2496     # installation paths. This gets a little tricky since we might have iconv
2497     # in both libiconv and in libc. In this case the jm_ICONV test will always
2498     # succeed when the header is found. To counter this, make sure the
2499     # library directory is there and check the ABI directory first (which
2500     # should be harmless on other systems.
2501     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2502     for l in "lib32" "lib" "lib/hpux32"; do
2503         if test -d "$i/$l" ; then
2504                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2505                 LIBS=
2506                 export LDFLAGS LIBS CPPFLAGS
2507                 # Try to find iconv(3)
2508                 jm_ICONV($i/$l)
2509                 if test x"$ICONV_FOUND" = "xyes" ; then
2510                     libext="$l"
2511                     break
2512                 fi
2513         fi
2514     done
2515
2516     if test x"$ICONV_FOUND" = "xyes" ; then
2517         iconv_current_LDFLAGS="-L$i/$libext"
2518         iconv_current_CPPFLAGS="-I$i/include"
2519
2520         if test x"$jm_cv_lib_iconv" != x; then
2521             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2522         else
2523             # We found iconv in libc.
2524             iconv_current_LIBS=""
2525         fi
2526
2527     fi
2528
2529     if test x"$ICONV_FOUND" = "xyes" ; then
2530
2531         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2532         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2533         LIBS="$save_LIBS $iconv_current_LIBS"
2534         export LDFLAGS LIBS CPPFLAGS
2535
2536         default_dos_charset=no
2537         default_display_charset=no
2538         default_unix_charset=no
2539
2540         # check for default dos charset name
2541         for j in CP850 IBM850 ; do
2542             rjs_CHARSET($j)
2543             default_dos_charset="$ICONV_CHARSET"
2544             if test x"$default_dos_charset" = x"$j"; then
2545                 break
2546             fi
2547         done
2548
2549         # check for default display charset name
2550         for j in ASCII 646 ; do
2551             rjs_CHARSET($j)
2552             default_display_charset="$ICONV_CHARSET"
2553             if test x"$default_display_charset" = x"$j"; then
2554                 break
2555             fi
2556         done
2557
2558         # check for default unix charset name
2559         for j in UTF-8 UTF8 ; do
2560             rjs_CHARSET($j)
2561             default_unix_charset="$ICONV_CHARSET"
2562             if test x"$default_unix_charset" = x"$j"; then
2563                 break
2564             fi
2565         done
2566
2567         if test "$default_dos_charset" != "no" -a \
2568                 "$default_dos_charset" != "cross" -a \
2569                 "$default_display_charset" != "no" -a \
2570                 "$default_display_charset" != "cross" -a \
2571                 "$default_unix_charset" != "no" -a \
2572                 "$default_unix_charset" != "cross"
2573         then
2574                 samba_cv_HAVE_NATIVE_ICONV=yes
2575         else
2576             if test "$default_dos_charset" = "cross" -o \
2577                      "$default_display_charset" = "cross" -o \
2578                      "$default_unix_charset" = "cross"
2579             then
2580                     samba_cv_HAVE_NATIVE_ICONV=cross
2581             else
2582                     samba_cv_HAVE_NATIVE_ICONV=no
2583             fi
2584         fi
2585
2586         # At this point, we have a libiconv candidate. We know that
2587         # we have the right headers and libraries, but we don't know
2588         # whether it does the conversions we want. We can't test this
2589         # because we are cross-compiling. This is not necessarily a big
2590         # deal, since we can't guarantee that the results we get now will
2591         # match the results we get at runtime anyway.
2592         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2593             default_dos_charset="CP850"
2594             default_display_charset="ASCII"
2595             default_unix_charset="UTF-8"
2596             samba_cv_HAVE_NATIVE_ICONV=yes
2597             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2598             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2599         fi
2600
2601         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2602
2603             CPPFLAGS=$save_CPPFLAGS
2604             LDFLAGS=$save_LDFLAGS
2605             LIBS=$save_LIBS
2606
2607             if test x"$iconv_current_LIBS" != x; then
2608                 LIBS="$LIBS $iconv_current_LIBS"
2609             fi
2610
2611             # Add the flags we need to CPPFLAGS and LDFLAGS
2612             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2613             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2614
2615             # Turn the #defines into string literals
2616             default_dos_charset="\"$default_dos_charset\""
2617             default_display_charset="\"$default_display_charset\""
2618             default_unix_charset="\"$default_unix_charset\""
2619
2620             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2621             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2622             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2623             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2624
2625            break
2626         fi
2627
2628     # We didn't find a working iconv, so keep going
2629     fi
2630
2631     #  We only need to clean these up here for the next pass through the loop
2632     CPPFLAGS=$save_CPPFLAGS
2633     LDFLAGS=$save_LDFLAGS
2634     LIBS=$save_LIBS
2635     export LDFLAGS LIBS CPPFLAGS
2636 done
2637 unset libext
2638
2639
2640 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2641     AC_MSG_WARN([Sufficient support for iconv function was not found.
2642     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2643    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2644    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2645    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2646 fi
2647
2648
2649 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2650 AC_TRY_RUN([
2651 #include <sys/types.h>
2652 #include <fcntl.h>
2653 #ifndef F_GETLEASE
2654 #define F_GETLEASE      1025
2655 #endif
2656 main() {
2657        int fd = open("/dev/null", O_RDONLY);
2658        return fcntl(fd, F_GETLEASE, 0) == -1;
2659 }
2660 ],
2661 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2662 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2663     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2664 fi
2665
2666 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2667 AC_TRY_RUN([
2668 #include <sys/types.h>
2669 #include <fcntl.h>
2670 #include <signal.h>
2671 #ifndef F_NOTIFY
2672 #define F_NOTIFY 1026
2673 #endif
2674 main() {
2675         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2676 }
2677 ],
2678 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2679 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2680     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2681 fi
2682
2683 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2684 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h)
2685 AC_CHECK_FUNC(inotify_init)
2686 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2687 ],
2688 samba_cv_HAVE_INOTIFY=yes,
2689 samba_cv_HAVE_INOTIFY=no,
2690 samba_cv_HAVE_INOTIFY=cross)
2691
2692 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2693     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2694 fi
2695
2696 #################################################
2697 # Check if FAM notifications are available. For FAM info, see
2698 #       http://oss.sgi.com/projects/fam/
2699 #       http://savannah.nongnu.org/projects/fam/
2700 AC_ARG_ENABLE(fam,
2701 [  --enable-fam            Turn on FAM support (default=auto)])
2702
2703 if test x$enable_fam != xno; then
2704     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2705     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2706         # On IRIX, libfam requires libC, but other FAM implementations
2707         # might not need it.
2708         AC_CHECK_LIB(fam, FAMOpen2,
2709             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"],
2710             [samba_cv_HAVE_LIBFAM=no])
2711
2712         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2713             samba_fam_xtra=-lC
2714             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2715                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"],
2716                 [samba_cv_HAVE_LIBFAM=no])
2717             unset samba_fam_xtra
2718         fi
2719     fi
2720
2721     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2722         default_shared_modules="$default_shared_modules vfs_notify_fam"
2723         AC_TRY_COMPILE([#include <fam.h>],
2724                     [FAMCodes code = FAMChanged;],
2725                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2726                         [Whether fam.h contains a typedef for enum FAMCodes]),
2727                     [])
2728     fi
2729
2730     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2731         AC_MSG_ERROR(FAM support requested but FAM library not available )
2732     fi
2733 fi
2734
2735 AC_SUBST(SMB_FAM_LIBS)
2736
2737 #################################################
2738 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2739
2740 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2741
2742 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2743 AC_TRY_RUN([
2744 #include <sys/types.h>
2745 #include <fcntl.h>
2746 #include <signal.h>
2747 #include <sys/file.h>
2748 #ifndef LOCK_MAND
2749 #define LOCK_MAND       32
2750 #define LOCK_READ       64
2751 #endif
2752 main() {
2753         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2754 }
2755 ],
2756 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2757 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2758     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2759 fi
2760
2761
2762 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2763 AC_TRY_COMPILE([#include <sys/types.h>
2764 #include <fcntl.h>],
2765 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2766 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2767 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2768     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2769 fi
2770
2771 #################################################
2772 # Check for POSIX capability support
2773
2774 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2775     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2776     [], [])
2777
2778 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2779
2780     ac_save_LIBS=$LIBS
2781     AC_LIBTESTFUNC(cap, cap_get_proc)
2782
2783     AC_CACHE_CHECK([for POSIX capabilities],
2784             samba_cv_HAVE_POSIX_CAPABILITIES,
2785             [
2786                 AC_TRY_RUN([
2787 #include <sys/types.h>
2788 #include <sys/capability.h>
2789 main() {
2790  cap_t cap;
2791  cap_value_t vals[1];
2792  if (!(cap = cap_get_proc()))
2793    exit(1);
2794  vals[0] = CAP_CHOWN;
2795  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2796  cap_set_proc(cap);
2797  exit(0);
2798 }],
2799                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2800                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2801                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2802             ])
2803
2804 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2805     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2806             [Whether POSIX capabilities are available])
2807 else
2808     LIBS=$ac_save_LIBS
2809 fi
2810
2811 fi
2812
2813 #
2814 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2815 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2816 #
2817
2818 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2819 AC_TRY_COMPILE([#include <sys/types.h>
2820 #if defined(HAVE_RPC_RPC_H)
2821 #include <rpc/rpc.h>
2822 #endif],
2823 [int16 testvar;],
2824 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2825 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2826     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2827 fi
2828
2829 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2830 AC_TRY_COMPILE([#include <sys/types.h>
2831 #if defined(HAVE_RPC_RPC_H)
2832 #include <rpc/rpc.h>
2833 #endif],
2834 [uint16 testvar;],
2835 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2836 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2837     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2838 fi
2839
2840 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2841 AC_TRY_COMPILE([#include <sys/types.h>
2842 #if defined(HAVE_RPC_RPC_H)
2843 #include <rpc/rpc.h>
2844 #endif],
2845 [int32 testvar;],
2846 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2847 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2848     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2849 fi
2850
2851 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2852 AC_TRY_COMPILE([#include <sys/types.h>
2853 #if defined(HAVE_RPC_RPC_H)
2854 #include <rpc/rpc.h>
2855 #endif],
2856 [uint32 testvar;],
2857 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2858 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2859     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2860 fi
2861
2862 dnl
2863 dnl Some systems (SCO) have a problem including
2864 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2865 dnl as a #define in <prot.h> and as part of an enum
2866 dnl in <rpc/rpc.h>.
2867 dnl
2868
2869 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2870 AC_TRY_COMPILE([#include <sys/types.h>
2871 #ifdef HAVE_SYS_SECURITY_H
2872 #include <sys/security.h>
2873 #include <prot.h>
2874 #endif  /* HAVE_SYS_SECURITY_H */
2875 #if defined(HAVE_RPC_RPC_H)
2876 #include <rpc/rpc.h>
2877 #endif],
2878 [int testvar;],
2879 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2880 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2881     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2882 fi
2883
2884 AC_MSG_CHECKING([for test routines])
2885 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2886            AC_MSG_RESULT(yes),
2887            AC_MSG_ERROR([cant find test code. Aborting config]),
2888            AC_MSG_WARN([cannot run when cross-compiling]))
2889
2890 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2891 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2892            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2893 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2894     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2895 fi
2896
2897 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
2898 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
2899            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
2900            samba_cv_HAVE_WORKING_AF_LOCAL=no,
2901            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
2902 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
2903 then
2904     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
2905 fi
2906
2907 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2908 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2909            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2910 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2911     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2912 fi
2913
2914 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
2915 AC_TRY_RUN([#include <stdlib.h>
2916 #include <sys/types.h>
2917 #include <sys/stat.h>
2918 #include <unistd.h>
2919 main() {
2920   struct stat st;
2921   char tpl[20]="/tmp/test.XXXXXX";
2922   int fd = mkstemp(tpl);
2923   if (fd == -1) exit(1);
2924   unlink(tpl);
2925   if (fstat(fd, &st) != 0) exit(1);
2926   if ((st.st_mode & 0777) != 0600) exit(1);
2927   exit(0);
2928 }],
2929 samba_cv_HAVE_SECURE_MKSTEMP=yes,
2930 samba_cv_HAVE_SECURE_MKSTEMP=no,
2931 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
2932 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
2933     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
2934 fi
2935
2936 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
2937         AC_TRY_RUN([#include "${srcdir-.}/tests/os2_delete.c"],
2938                 [samba_cv_HAVE_BROKEN_READDIR=no],
2939                         [samba_cv_HAVE_BROKEN_READDIR=yes],
2940                         [samba_cv_HAVE_BROKEN_READDIR="assuming not"])])
2941
2942 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
2943 AC_CACHE_CHECK([for replacing readdir],samba_cv_REPLACE_READDIR,[
2944         AC_TRY_RUN([
2945 #include "${srcdir-.}/lib/repdir.c"
2946 #include "${srcdir-.}/tests/os2_delete.c"],
2947         samba_cv_REPLACE_READDIR=yes,samba_cv_REPLACE_READDIR=no)])
2948 fi
2949
2950 if test x"$samba_cv_REPLACE_READDIR" = x"yes"; then
2951         AC_DEFINE(REPLACE_READDIR,1,[replace readdir])
2952 fi
2953
2954 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2955 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2956 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2957 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2958 AC_CHECK_FUNCS(getpagesize)
2959
2960 dnl test for getifaddrs and freeifaddrs
2961 AC_CACHE_CHECK([for getifaddrs and freeifaddrs],samba_cv_HAVE_GETIFADDRS,[
2962 AC_TRY_COMPILE([
2963 #include <sys/socket.h>
2964 #include <sys/types.h>
2965 #include <netinet/in.h>
2966 #include <arpa/inet.h>
2967 #include <ifaddrs.h>
2968 #include <netdb.h>],
2969 [
2970 struct ifaddrs *ifp = NULL;
2971 int ret = getifaddrs (&ifp);
2972 freeifaddrs(ifp);
2973 ],
2974 samba_cv_HAVE_GETIFADDRS=yes,samba_cv_HAVE_GETIFADDRS=no)])
2975 if test x"$samba_cv_HAVE_GETIFADDRS" = x"yes"; then
2976     AC_DEFINE(HAVE_GETIFADDRS,1,[Whether the system has getifaddrs])
2977     AC_DEFINE(HAVE_FREEIFADDRS,1,[Whether the system has freeifaddrs])
2978 fi
2979
2980 ##################
2981 # look for a method of finding the list of network interfaces
2982 iface=no;
2983 AC_CACHE_CHECK([for iface getifaddrs],samba_cv_HAVE_IFACE_GETIFADDRS,[
2984 SAVE_CPPFLAGS="$CPPFLAGS"
2985 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2986 AC_TRY_RUN([
2987 #define NO_CONFIG_H 1
2988 #define HAVE_IFACE_GETIFADDRS 1
2989 #define AUTOCONF_TEST 1
2990 #include "${srcdir-.}/lib/replace/replace.c"
2991 #include "${srcdir-.}/lib/interfaces.c"],
2992            samba_cv_HAVE_IFACE_GETIFADDRS=yes,samba_cv_HAVE_IFACE_GETIFADDRS=no,samba_cv_HAVE_IFACE_GETIFADDRS=cross)])
2993 CPPFLAGS="$SAVE_CPPFLAGS"
2994 if test x"$samba_cv_HAVE_IFACE_GETIFADDRS" = x"yes"; then
2995     iface=yes;AC_DEFINE(HAVE_IFACE_GETIFADDRS,1,[Whether iface getifaddrs is available])
2996 fi
2997
2998 if test $iface = no; then
2999 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
3000 SAVE_CPPFLAGS="$CPPFLAGS"
3001 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
3002 AC_TRY_RUN([
3003 #define NO_CONFIG_H 1
3004 #define HAVE_IFACE_IFCONF 1
3005 #define AUTOCONF_TEST 1
3006 #include "${srcdir-.}/lib/replace/replace.c"
3007 #include "${srcdir-.}/lib/interfaces.c"],
3008            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
3009 CPPFLAGS="$SAVE_CPPFLAGS"
3010 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
3011     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
3012 fi
3013 fi
3014
3015 if test $iface = no; then
3016 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
3017 SAVE_CPPFLAGS="$CPPFLAGS"
3018 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
3019 AC_TRY_RUN([
3020 #define NO_CONFIG_H 1
3021 #define HAVE_IFACE_IFREQ 1
3022 #define AUTOCONF_TEST 1
3023 #include "${srcdir-.}/lib/replace/replace.c"
3024 #include "${srcdir-.}/lib/interfaces.c"],
3025            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
3026 CPPFLAGS="$SAVE_CPPFLAGS"
3027 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
3028     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
3029 fi
3030 fi
3031
3032 if test $iface = no; then
3033 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
3034 SAVE_CPPFLAGS="$CPPFLAGS"
3035 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
3036 AC_TRY_RUN([
3037 #define NO_CONFIG_H 1
3038 #define HAVE_IFACE_AIX 1
3039 #define AUTOCONF_TEST 1
3040 #undef _XOPEN_SOURCE_EXTENDED
3041 #include "${srcdir-.}/lib/replace/replace.c"
3042 #include "${srcdir-.}/lib/interfaces.c"],
3043            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
3044 CPPFLAGS="$SAVE_CPPFLAGS"
3045 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
3046     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
3047 fi
3048 fi
3049
3050 dnl test for ipv6
3051 AC_CACHE_CHECK([for ipv6 support],samba_cv_HAVE_IPV6,[
3052 AC_TRY_COMPILE([
3053 #include <stdlib.h> /* for NULL */
3054 #include <sys/socket.h>
3055 #include <sys/types.h>
3056 #include <netdb.h>],
3057 [
3058 struct sockaddr_storage sa_store;
3059 struct addrinfo *ai = NULL;
3060 struct in6_addr in6addr;
3061 int s = socket(AF_INET6, SOCK_STREAM, 0);
3062 int ret = getaddrinfo(NULL, NULL, NULL, &ai);
3063 if (ret != 0) {
3064         const char *es = gai_strerror(ret);
3065 }
3066 freeaddrinfo(ai);
3067 ],
3068 samba_cv_HAVE_IPV6=yes,samba_cv_HAVE_IPV6=no)])
3069 if test x"$samba_cv_HAVE_IPV6" = x"yes"; then
3070     AC_DEFINE(HAVE_IPV6,1,[Whether the system has IPv6 support])
3071 fi
3072
3073 ################################################
3074 # look for a method of setting the effective uid
3075 seteuid=no;
3076 if test $seteuid = no; then
3077 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
3078 AC_TRY_RUN([
3079 #define AUTOCONF_TEST 1
3080 #define USE_SETRESUID 1
3081 #include "confdefs.h"
3082 #include "${srcdir-.}/lib/util_sec.c"],
3083            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
3084 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
3085     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
3086 fi
3087 fi
3088
3089
3090 if test $seteuid = no; then
3091 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
3092 AC_TRY_RUN([
3093 #define AUTOCONF_TEST 1
3094 #define USE_SETREUID 1
3095 #include "confdefs.h"
3096 #include "${srcdir-.}/lib/util_sec.c"],
3097            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
3098 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
3099     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
3100 fi
3101 fi
3102
3103 if test $seteuid = no; then
3104 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
3105 AC_TRY_RUN([
3106 #define AUTOCONF_TEST 1
3107 #define USE_SETEUID 1
3108 #include "confdefs.h"
3109 #include "${srcdir-.}/lib/util_sec.c"],
3110            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
3111 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
3112     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
3113 fi
3114 fi
3115
3116 if test $seteuid = no; then
3117 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
3118 AC_TRY_RUN([
3119 #define AUTOCONF_TEST 1
3120 #define USE_SETUIDX 1
3121 #include "confdefs.h"
3122 #include "${srcdir-.}/lib/util_sec.c"],
3123            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
3124 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
3125     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
3126 fi
3127 fi
3128
3129 AC_CACHE_CHECK([for the Darwin initgroups system call],
3130         samba_cv_DARWIN_INITGROUPS,
3131         AC_TRY_LINK([
3132 #include <sys/syscall.h>
3133 #include <unistd.h>
3134         ],
3135         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
3136         samba_cv_DARWIN_INITGROUPS=yes,
3137         samba_cv_DARWIN_INITGROUPS=no)
3138 )
3139
3140 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
3141     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
3142         [Whether to use the Darwin-specific initgroups system call])
3143 fi
3144
3145 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
3146 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
3147            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
3148 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
3149     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
3150 fi
3151
3152 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
3153 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
3154            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
3155 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
3156     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
3157 fi
3158
3159 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
3160 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
3161            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
3162 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
3163     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
3164
3165 else
3166
3167 dnl
3168 dnl Don't check for 64 bit fcntl locking if we know that the
3169 dnl glibc2.1 broken check has succeeded.
3170 dnl
3171
3172   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
3173   AC_TRY_RUN([
3174 #if defined(HAVE_UNISTD_H)
3175 #include <unistd.h>
3176 #endif
3177 #include <stdio.h>
3178 #include <stdlib.h>
3179
3180 #ifdef HAVE_FCNTL_H
3181 #include <fcntl.h>
3182 #endif
3183
3184 #ifdef HAVE_SYS_FCNTL_H
3185 #include <sys/fcntl.h>
3186 #endif
3187 main() { struct flock64 fl64;
3188 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
3189 exit(0);
3190 #else
3191 exit(1);
3192 #endif
3193 }],
3194        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
3195
3196   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
3197       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
3198   fi
3199 fi
3200
3201 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
3202 AC_TRY_COMPILE([#include <sys/types.h>
3203 #include <sys/stat.h>
3204 #include <unistd.h>],
3205 [struct stat st;  st.st_blocks = 0;],
3206 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
3207 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
3208     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
3209 fi
3210
3211 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
3212 AC_TRY_COMPILE([#include <sys/types.h>
3213 #include <sys/stat.h>
3214 #include <unistd.h>],
3215 [struct stat st;  st.st_blksize = 0;],
3216 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
3217 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
3218     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
3219 fi
3220
3221 AC_CACHE_CHECK([for st_flags in struct stat],
3222         samba_cv_HAVE_STAT_ST_FLAGS,
3223         [
3224             AC_TRY_COMPILE([#include <sys/types.h>
3225 #include <sys/stat.h>
3226 #include <unistd.h>],
3227             [struct stat st;  st.st_flags = 0;],
3228             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3229             samba_cv_HAVE_STAT_ST_FLAGS=no,
3230             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3231         ])
3232
3233 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3234     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3235                 [Whether the stat struct has a st_flags member])
3236 fi
3237
3238 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3239 AC_TRY_COMPILE([
3240 #include <sys/types.h>
3241 #include <sys/acl.h>
3242 #if defined(HAVE_RPCSVC_NIS_H)
3243 #include <rpcsvc/nis.h>
3244 #endif],
3245 [int i;],
3246 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3247 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3248         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3249 fi
3250
3251 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3252 AC_TRY_RUN([
3253 #include <stdio.h>
3254 #include <limits.h>
3255 main() {
3256         char *newpath = realpath("/tmp", NULL);
3257         exit ((newpath != NULL) ? 0 : 1);
3258 }
3259 ],
3260 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3261 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3262     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3263 fi
3264
3265 #################################################
3266 # check for AFS clear-text auth support
3267 samba_cv_WITH_AFS=no
3268 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3269 AC_ARG_WITH(afs,
3270 [  --with-afs              Include AFS clear-text auth support (default=no) ],
3271 [ case "$withval" in
3272   yes|auto)
3273     AC_MSG_RESULT($withval)
3274     samba_cv_WITH_AFS=$withval
3275     ;;
3276   *)
3277     AC_MSG_RESULT(no)
3278     ;;
3279   esac ],
3280   AC_MSG_RESULT(no)
3281 )
3282
3283 ####################################################
3284 # check for Linux-specific AFS fake-kaserver support
3285 samba_cv_WITH_FAKE_KASERVER=no
3286 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3287 AC_ARG_WITH(fake-kaserver,
3288 [  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
3289 [ case "$withval" in
3290   yes|auto)
3291     AC_MSG_RESULT($withval)
3292     samba_cv_WITH_FAKE_KASERVER=$withval
3293     ;;
3294   *)
3295     AC_MSG_RESULT(no)
3296     ;;
3297   esac ],
3298   AC_MSG_RESULT(no)
3299 )
3300
3301 #################################################
3302 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3303 if test x"$samba_cv_WITH_AFS" != x"no" ||
3304    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3305
3306     # see if this box has the afs-headers in /usr/include/afs
3307     AC_MSG_CHECKING(for /usr/include/afs)
3308     if test -d /usr/include/afs; then
3309           CFLAGS="$CFLAGS -I/usr/include/afs"
3310           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
3311           AC_MSG_RESULT(yes)
3312     else
3313       AC_MSG_RESULT(no)
3314     fi
3315
3316     # check for afs.h
3317     have_afs_headers=no
3318     AC_CHECK_HEADERS(afs.h afs/afs.h)
3319     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3320         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3321            test x"$samba_cv_WITH_AFS" = x"auto"; then
3322                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3323         else
3324                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3325         fi
3326     else
3327         have_afs_headers=yes
3328     fi
3329 fi
3330
3331 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3332     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3333 fi
3334
3335 #################################################
3336 # check whether to compile AFS/NT ACL mapping module
3337 samba_cv_WITH_VFS_AFSACL=no
3338 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3339 AC_ARG_WITH(vfs-afsacl,
3340 [  --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no) ],
3341 [ case "$withval" in
3342   yes|auto)
3343     AC_MSG_RESULT($withval)
3344     samba_cv_WITH_VFS_AFSACL=yes
3345     ;;
3346   *)
3347     AC_MSG_RESULT(no)
3348     ;;
3349   esac ],
3350   AC_MSG_RESULT(no)
3351 )
3352
3353 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3354    default_shared_modules="$default_shared_modules vfs_afsacl"
3355 fi
3356         
3357 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3358     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3359 fi
3360
3361 #################################################
3362 # check for the DFS clear-text auth system
3363 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3364 AC_ARG_WITH(dfs,
3365 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
3366 [ case "$withval" in
3367   yes)
3368     AC_MSG_RESULT(yes)
3369     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3370     ;;
3371   *)
3372     AC_MSG_RESULT(no)
3373     ;;
3374   esac ],
3375   AC_MSG_RESULT(no)
3376 )
3377
3378 ########################################################
3379 # Compile with LDAP support?
3380
3381 with_ldap_support=auto
3382 AC_MSG_CHECKING([for LDAP support])
3383
3384 AC_ARG_WITH(ldap,
3385 [  --with-ldap             LDAP support (default yes)],
3386 [ case "$withval" in
3387     yes|no)
3388         with_ldap_support=$withval
3389         ;;
3390   esac ])
3391
3392 AC_MSG_RESULT($with_ldap_support)
3393
3394 SMBLDAP=""
3395 AC_SUBST(SMBLDAP)
3396 SMBLDAPUTIL=""
3397 AC_SUBST(SMBLDAPUTIL)
3398 LDBLDAP=""
3399 AC_SUBST(LDBLDAP)
3400
3401 if test x"$with_ldap_support" != x"no"; then
3402
3403   ##################################################################
3404   # first test for ldap.h and lber.h
3405   # (ldap.h is required for this test)
3406   AC_CHECK_HEADERS(ldap.h lber.h)
3407
3408   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3409         if test x"$with_ldap_support" = x"yes"; then
3410          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3411         else
3412          AC_MSG_WARN(ldap.h is needed for LDAP support)
3413         fi
3414         
3415         with_ldap_support=no
3416   fi
3417
3418   ##################################################################
3419   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3420   # unsigned int in include/includes.h
3421   case $host_os in
3422         *hpux*)
3423          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3424          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3425         with_ldap_support=yes
3426         ;;
3427         *)
3428         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3429         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3430                 if test x"$with_ldap_support" = x"yes"; then
3431                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3432                 else
3433                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3434                 fi
3435                 with_ldap_support=no
3436         fi
3437         ;;
3438   esac
3439 fi
3440
3441 if test x"$with_ldap_support" != x"no"; then
3442   ac_save_LIBS=$LIBS
3443
3444   ##################################################################
3445   # we might need the lber lib on some systems. To avoid link errors
3446   # this test must be before the libldap test
3447   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3448
3449   ########################################################
3450   # If ber_sockbuf_add_io() is available we can add
3451   # SASL wrapping hooks
3452   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3453
3454   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3455                  AC_TRY_COMPILE([#include <ldap.h>],
3456                                 [int val = LDAP_OPT_SOCKBUF;],
3457                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3458                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3459
3460   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3461           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3462         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3463   fi
3464
3465   ########################################################
3466   # now see if we can find the ldap libs in standard paths
3467   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3468
3469   ########################################################
3470   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3471   # Check found in pam_ldap 145.
3472   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3473
3474   LIBS="$LIBS $LDAP_LIBS"
3475   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3476     AC_TRY_COMPILE([
3477         #include <lber.h>
3478         #include <ldap.h>],
3479         [ldap_set_rebind_proc(0, 0, 0);],
3480         [smb_ldap_cv_ldap_set_rebind_proc=3],
3481         [smb_ldap_cv_ldap_set_rebind_proc=2]
3482     )
3483   ])
3484
3485   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3486
3487   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3488
3489   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3490     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3491     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3492     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3493     default_shared_modules="$default_shared_modules";
3494     SMBLDAP="lib/smbldap.o"
3495     SMBLDAPUTIL="lib/smbldap_util.o"
3496     with_ldap_support=yes
3497     AC_MSG_CHECKING(whether LDAP support is used)
3498     AC_MSG_RESULT(yes)
3499   else
3500     if test x"$with_ldap_support" = x"yes"; then
3501         AC_MSG_ERROR(libldap is needed for LDAP support)
3502     else
3503         AC_MSG_WARN(libldap is needed for LDAP support)
3504     fi
3505
3506     LDAP_LIBS=""
3507     with_ldap_support=no
3508   fi
3509   LIBS=$ac_save_LIBS
3510 fi
3511
3512
3513 #################################################
3514 # active directory support
3515
3516 with_ads_support=auto
3517 AC_MSG_CHECKING([for Active Directory and krb5 support])
3518
3519 AC_ARG_WITH(ads,
3520 [  --with-ads              Active Directory support (default auto)],
3521 [ case "$withval" in
3522     yes|no)
3523         with_ads_support="$withval"
3524         ;;
3525   esac ])
3526
3527 AC_MSG_RESULT($with_ads_support)
3528
3529 FOUND_KRB5=no
3530 KRB5_LIBS=""
3531
3532 if test x"$with_ldap_support" != x"yes"; then
3533
3534     if test x"$with_ads_support" = x"yes"; then
3535         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3536     elif test x"$with_ads_support" = x"auto"; then
3537         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3538         with_ads_support=no
3539     fi
3540
3541 else
3542
3543     # Check to see whether there is enough LDAP functionality to be able
3544     # to build AD support.
3545
3546 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3547 case "$host_os" in
3548         *hpux*)
3549     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3550
3551     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3552         if test x"$with_ads_support" = x"yes"; then
3553             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3554         elif test x"$with_ads_support" = x"auto"; then
3555             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3556             with_ads_support=no
3557         fi
3558     fi
3559     ;;
3560         *)
3561     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3562
3563     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3564         if test x"$with_ads_support" = x"yes"; then
3565             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3566         elif test x"$with_ads_support" = x"auto"; then
3567             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3568             with_ads_support=no
3569         fi
3570     fi
3571     ;;
3572 esac
3573
3574
3575     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3576
3577     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3578         if test x"$with_ads_support" = x"yes"; then
3579             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3580         elif test x"$with_ads_support" = x"auto"; then
3581             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3582             with_ads_support=no
3583         fi
3584     fi
3585
3586 fi
3587
3588 if test x"$with_ads_support" != x"no"; then
3589
3590   # Do no harm to the values of CFLAGS and LIBS while testing for
3591   # Kerberos support.
3592
3593   if test x$FOUND_KRB5 = x"no"; then
3594     #################################################
3595     # check for location of Kerberos 5 install
3596     AC_MSG_CHECKING(for kerberos 5 install path)
3597     AC_ARG_WITH(krb5,
3598     [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
3599     [ case "$withval" in
3600       no)
3601         AC_MSG_RESULT(no krb5-path given)
3602         ;;
3603       yes)
3604         AC_MSG_RESULT(/usr)
3605         FOUND_KRB5=yes
3606         ;;
3607       *)
3608         AC_MSG_RESULT($withval)
3609         KRB5_CFLAGS="-I$withval/include"
3610         KRB5_CPPFLAGS="-I$withval/include"
3611         KRB5_LDFLAGS="-L$withval/lib"
3612         FOUND_KRB5=yes
3613         if test -x "$withval/bin/krb5-config"; then
3614                 KRB5CONFIG=$withval/bin/krb5-config
3615         fi
3616         ;;
3617       esac ],
3618       AC_MSG_RESULT(no krb5-path given)
3619     )
3620   fi
3621
3622   #################################################
3623   # check for krb5-config from recent MIT and Heimdal kerberos 5
3624   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3625   AC_MSG_CHECKING(for working krb5-config)
3626   if test -x "$KRB5CONFIG"; then
3627     ac_save_CFLAGS=$CFLAGS
3628     CFLAGS="";export CFLAGS
3629     ac_save_LDFLAGS=$LDFLAGS
3630     LDFLAGS="";export LDFLAGS
3631     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3632     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3633     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3634     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3635     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3636     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3637     FOUND_KRB5=yes
3638     AC_MSG_RESULT(yes)
3639   else
3640     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3641   fi
3642
3643   if test x$FOUND_KRB5 = x"no"; then
3644     #################################################
3645     # see if this box has the SuSE location for the heimdal krb implementation
3646     AC_MSG_CHECKING(for /usr/include/heimdal)
3647     if test -d /usr/include/heimdal; then
3648       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3649           KRB5_CFLAGS="-I/usr/include/heimdal"
3650           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3651           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3652           FOUND_KRB5=yes
3653           AC_MSG_RESULT(yes)
3654       else
3655           KRB5_CFLAGS="-I/usr/include/heimdal"
3656           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3657           FOUND_KRB5=yes
3658           AC_MSG_RESULT(yes)
3659       fi
3660     else
3661       AC_MSG_RESULT(no)
3662     fi
3663   fi
3664
3665   if test x$FOUND_KRB5 = x"no"; then
3666     #################################################
3667     # see if this box has the RedHat location for kerberos
3668     AC_MSG_CHECKING(for /usr/kerberos)
3669     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3670       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3671       KRB5_CFLAGS="-I/usr/kerberos/include"
3672       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3673       FOUND_KRB5=yes
3674       AC_MSG_RESULT(yes)
3675     else
3676       AC_MSG_RESULT(no)
3677     fi
3678   fi
3679
3680   if test x$FOUND_KRB5 = x"no"; then
3681     #################################################
3682     # see if this box has the OpenBSD location for heimdal krb5
3683     AC_MSG_CHECKING(for /usr/include/kerberosV)
3684     if test -d /usr/include/kerberosV; then
3685       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3686       KRB5_LIBS="-lcrypto"
3687       FOUND_KRB5=yes
3688       AC_MSG_RESULT(yes)
3689     else
3690       AC_MSG_RESULT(no)
3691     fi
3692   fi
3693
3694   ac_save_CFLAGS=$CFLAGS
3695   ac_save_CPPFLAGS=$CPPFLAGS
3696   ac_save_LDFLAGS=$LDFLAGS
3697
3698   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3699   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3700   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3701
3702   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3703
3704   # now check for krb5.h. Some systems have the libraries without the headers!
3705   # note that this check is done here to allow for different kerberos
3706   # include paths
3707   AC_CHECK_HEADERS(krb5.h)
3708
3709   if test x"$ac_cv_header_krb5_h" = x"no"; then
3710
3711     # Give a warning if AD support was not explicitly requested,
3712     # i.e with_ads_support = auto, otherwise die with an error.
3713
3714     if test x"$with_ads_support" = x"yes"; then
3715       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3716     else
3717       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3718     fi
3719
3720     # Turn off AD support and restore CFLAGS and LIBS variables
3721
3722     with_ads_support="no"
3723
3724     CFLAGS=$ac_save_CFLAGS
3725     CPPFLAGS=$ac_save_CPPFLAGS
3726     LDFLAGS=$ac_save_LDFLAGS
3727   fi
3728   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3729   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
3730         WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
3731         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
3732   fi
3733 fi
3734
3735 # Now we have determined whether we really want ADS support
3736 use_ads=no
3737 if test x"$with_ads_support" != x"no"; then
3738   use_ads=yes
3739   have_gssapi=no
3740   ac_save_LIBS=$LIBS
3741
3742   # now check for gssapi headers.  This is also done here to allow for
3743   # different kerberos include paths
3744   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3745
3746   ##################################################################
3747   # we might need the k5crypto and com_err libraries on some systems
3748   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3749   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3750
3751   # Heimdal checks.
3752   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3753   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3754   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3755
3756   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3757   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3758
3759   ########################################################
3760   # now see if we can find the krb5 libs in standard paths
3761   # or as specified above
3762   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3763   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3764
3765   ########################################################
3766   # now see if we can find the gssapi libs in standard paths
3767   if test x"$have_gssapi" != x"yes"; then
3768      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3769   fi
3770
3771   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3772   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3773   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3774   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3775   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3776   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3777   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3778   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3779   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3780   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3781   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3782   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3783   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3784   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3785   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3786   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3787   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3788   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3789   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3790   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3791   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3792   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3793   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3794   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3795   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3796   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3797   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3798   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3799   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3800   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3801   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3802   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3803   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3804   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3805   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3806   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3807   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3808   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3809   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3810   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3811   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3812
3813   LIBS="$KRB5_LIBS $LIBS"
3814
3815   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3816         smb_krb5_ticket_has_keyinfo,
3817         [
3818             AC_TRY_COMPILE(
3819             [
3820                 #include <krb5.h>
3821             ],
3822             [
3823                 krb5_ticket ticket;
3824                 krb5_kvno kvno;
3825                 krb5_enctype enctype;
3826
3827                 enctype = ticket.enc_part.enctype;
3828                 kvno = ticket.enc_part.kvno;
3829             ],
3830             [ smb_krb5_ticket_has_keyinfo=yes ],
3831             [ smb_krb5_ticket_has_keyinfo=no ])
3832         ])
3833
3834   if test x"$smb_krb5_ticket_has_keyinfo" = x"yes" ; then
3835         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3836             [Whether the krb5_ticket structure contains the kvno and enctype])
3837   fi
3838
3839   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3840           smb_krb5_creds_opt_free_context,
3841           [
3842                 AC_TRY_COMPILE([
3843                     #include <krb5.h>],
3844                     [
3845                         krb5_context ctx;
3846                         krb5_get_init_creds_opt *opt = NULL;
3847                         krb5_get_init_creds_opt_free(ctx, opt);
3848                     ],
3849                     [smb_krb5_creds_opt_free_context=yes],
3850                     [smb_krb5_creds_opt_free_context=no]
3851                 )
3852           ])
3853
3854   if test x"$smb_krb5_creds_opt_free_context" = x"yes" ; then
3855         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3856             [Whether krb5_get_init_creds_opt_free takes a context argument])
3857   fi
3858
3859   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_verify_checksum, [
3860     AC_TRY_COMPILE([
3861         #include <krb5.h>],
3862         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3863         [smb_krb5_verify_checksum=7],
3864         [smb_krb5_verify_checksum=6],
3865     )
3866   ])
3867   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_verify_checksum, [Number of arguments to krb5_verify_checksum])
3868
3869   AC_CACHE_CHECK([for checksum in krb5_checksum],
3870                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3871     AC_TRY_COMPILE([#include <krb5.h>],
3872       [krb5_checksum cksum; cksum.checksum.length = 0;],
3873       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3874       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3875
3876   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3877     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3878                [Whether the krb5_checksum struct has a checksum property])
3879   fi
3880
3881   AC_CACHE_CHECK([for etype in EncryptedData],
3882                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3883     AC_TRY_COMPILE([#include <krb5.h>],
3884       [EncryptedData edata; edata.etype = 0;],
3885       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3886       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3887
3888   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3889     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3890                [Whether the EncryptedData struct has a etype property])
3891   fi
3892
3893   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3894                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3895     AC_TRY_COMPILE([#include <krb5.h>],
3896       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3897       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3898       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3899
3900   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3901     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3902                [Whether the krb5_ap_req struct has a ticket pointer])
3903   fi
3904
3905   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3906                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3907     AC_TRY_COMPILE([#include <krb5.h>],
3908       [krb5_error err; err.e_data = NULL;],
3909       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3910       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3911
3912   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3913     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3914                [Whether the krb5_error struct has a e_data pointer])
3915   fi
3916
3917   AC_CACHE_CHECK([for krb5_crypto type],
3918                 samba_cv_HAVE_KRB5_CRYPTO,[
3919     AC_TRY_COMPILE([#include <krb5.h>],
3920       [krb5_crypto crypto;],
3921       samba_cv_HAVE_KRB5_CRYPTO=yes,
3922       samba_cv_HAVE_KRB5_CRYPTO=no)])
3923
3924   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3925     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3926                [Whether the type krb5_crypto exists])
3927   fi
3928
3929   AC_CACHE_CHECK([for krb5_encrypt_block type],
3930                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3931     AC_TRY_COMPILE([#include <krb5.h>],
3932       [krb5_encrypt_block block;],
3933       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3934       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3935
3936   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3937     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3938                [Whether the type krb5_encrypt_block exists])
3939   fi
3940
3941   AC_CACHE_CHECK([for addrtype in krb5_address],
3942                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3943     AC_TRY_COMPILE([#include <krb5.h>],
3944       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3945       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3946       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3947
3948   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3949     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3950                [Whether the krb5_address struct has a addrtype property])
3951   fi
3952
3953   AC_CACHE_CHECK([for addr_type in krb5_address],
3954                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3955     AC_TRY_COMPILE([#include <krb5.h>],
3956       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3957       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3958       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3959
3960   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3961     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3962               [Whether the krb5_address struct has a addr_type property])
3963   fi
3964
3965   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3966                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3967                  [AC_TRY_COMPILE([#include <krb5.h>],
3968     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3969     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3970
3971   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3972     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3973               [Whether the krb5_ticket struct has a enc_part2 property])
3974   fi
3975
3976   AC_CACHE_CHECK([for keyblock in krb5_creds],
3977                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3978     AC_TRY_COMPILE([#include <krb5.h>],
3979       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3980       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3981       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3982
3983   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3984     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3985               [Whether the krb5_creds struct has a keyblock property])
3986   fi
3987
3988   AC_CACHE_CHECK([for session in krb5_creds],
3989                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3990     AC_TRY_COMPILE([#include <krb5.h>],
3991       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3992       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3993       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3994
3995   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3996     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3997               [Whether the krb5_creds struct has a session property])
3998   fi
3999
4000   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
4001                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
4002     AC_TRY_COMPILE([#include <krb5.h>],
4003       [krb5_keyblock key; key.keyvalue.data = NULL;],
4004       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
4005       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
4006
4007   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
4008     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
4009               [Whether the krb5_keyblock struct has a keyvalue property])
4010   fi
4011
4012   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
4013                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
4014     AC_TRY_COMPILE([#include <krb5.h>],
4015       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
4016       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
4017       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
4018   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
4019                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
4020     AC_TRY_COMPILE([#include <krb5.h>],
4021       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
4022       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
4023       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
4024 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
4025 # w.r.t. arcfour and windows, so we must not enable it here
4026   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
4027           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
4028     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
4029               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
4030   fi
4031
4032   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
4033                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
4034     AC_TRY_COMPILE([#include <krb5.h>],
4035       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
4036       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
4037       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
4038
4039   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
4040     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
4041               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
4042   fi
4043
4044   AC_CACHE_CHECK([for KV5M_KEYTAB],
4045                  samba_cv_HAVE_KV5M_KEYTAB,[
4046     AC_TRY_COMPILE([#include <krb5.h>],
4047       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
4048       samba_cv_HAVE_KV5M_KEYTAB=yes,
4049       samba_cv_HAVE_KV5M_KEYTAB=no)])
4050
4051   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
4052       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
4053              [Whether the KV5M_KEYTAB option is available])
4054   fi
4055
4056   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
4057                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
4058     AC_TRY_COMPILE([#include <krb5.h>],
4059       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
4060       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
4061       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
4062
4063   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
4064     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
4065               [Whether KRB5_KU_OTHER_CKSUM is available])
4066   fi
4067
4068   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
4069                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
4070     AC_TRY_COMPILE([#include <krb5.h>],
4071       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
4072       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
4073       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
4074
4075   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
4076     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
4077               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
4078   fi
4079
4080   AC_CACHE_CHECK([for the krb5_princ_component macro],
4081                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
4082     AC_TRY_LINK([#include <krb5.h>],
4083       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
4084       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
4085       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
4086
4087   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
4088     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
4089                [Whether krb5_princ_component is available])
4090   fi
4091
4092   AC_CACHE_CHECK([for key in krb5_keytab_entry],
4093                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
4094     AC_TRY_COMPILE([#include <krb5.h>],
4095       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
4096       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
4097       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
4098
4099   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
4100     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
4101               [Whether krb5_keytab_entry has key member])
4102   fi
4103
4104   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
4105                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
4106     AC_TRY_COMPILE([#include <krb5.h>],
4107       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
4108       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
4109       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
4110
4111   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
4112     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
4113               [Whether krb5_keytab_entry has keyblock member])
4114   fi
4115
4116   AC_CACHE_CHECK([for magic in krb5_address],
4117                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
4118     AC_TRY_COMPILE([#include <krb5.h>],
4119       [krb5_address addr; addr.magic = 0;],
4120       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
4121       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
4122
4123   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
4124     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
4125               [Whether the krb5_address struct has a magic property])
4126   fi
4127
4128   AC_CACHE_CHECK([for WRFILE: keytab support],
4129                 samba_cv_HAVE_WRFILE_KEYTAB,[
4130     AC_TRY_RUN([
4131 #include<krb5.h>
4132   main()
4133   {
4134     krb5_context context;
4135     krb5_keytab keytab;
4136
4137     krb5_init_context(&context);
4138     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
4139   }],
4140   samba_cv_HAVE_WRFILE_KEYTAB=yes,
4141   samba_cv_HAVE_WRFILE_KEYTAB=no)])
4142
4143   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
4144       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
4145                [Whether the WRFILE:-keytab is supported])
4146   fi
4147
4148   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
4149                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
4150     AC_TRY_COMPILE([#include <krb5.h>],
4151     [
4152     krb5_context context;
4153     krb5_principal principal;
4154     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
4155     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
4156     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
4157
4158   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
4159     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
4160               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
4161   fi
4162
4163   AC_CACHE_CHECK([for krb5_addresses type],
4164                 samba_cv_HAVE_KRB5_ADDRESSES,[
4165     AC_TRY_COMPILE([#include <krb5.h>],
4166       [krb5_addresses addr;],
4167       samba_cv_HAVE_KRB5_ADDRESSES=yes,
4168       samba_cv_HAVE_KRB5_ADDRESSES=no)])
4169
4170   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
4171     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
4172                [Whether the type krb5_addresses type exists])
4173   fi
4174
4175   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
4176                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
4177     AC_TRY_COMPILE([#include <krb5.h>],
4178     [
4179     krb5_mk_error(0,0,0);],
4180     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
4181     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
4182
4183   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
4184     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
4185               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
4186   fi
4187
4188   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
4189     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
4190         smb_krb5_enctype_to_string_takes_krb5_context_arg,[
4191         AC_TRY_RUN_STRICT([
4192                 #include <krb5.h>
4193                 int main(void) {
4194                         krb5_context context = NULL;
4195                         char *str = NULL;
4196                         krb5_enctype_to_string(context, 1, &str);
4197                         if (str) free (str); 
4198                         return 0;
4199                 }
4200                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4201                 smb_krb5_enctype_to_string_takes_krb5_context_arg=yes,
4202                 smb_krb5_enctype_to_string_takes_krb5_context_arg=no)])
4203
4204     if test x"$smb_krb5_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4205       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4206                 [whether krb5_enctype_to_string takes krb5_context argument])
4207     fi
4208
4209     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4210         smb_krb5_enctype_to_string_takes_size_t_arg,[
4211         AC_TRY_RUN_STRICT([
4212                 #include <krb5.h>
4213                 int main(void) {
4214                         char buf[256];
4215                         krb5_enctype_to_string(1, buf, 256);
4216                         return 0;
4217                 }
4218                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4219                 smb_krb5_enctype_to_string_takes_size_t_arg=yes,
4220                 smb_krb5_enctype_to_string_takes_size_t_arg=no)])
4221
4222     if test x"$smb_krb5_enctype_to_string_takes_size_t_arg" = x"yes"; then
4223       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4224                 [whether krb5_enctype_to_string takes size_t argument])
4225     fi
4226   fi
4227
4228   AC_CACHE_CHECK([for krb5_principal_get_realm],
4229                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4230     AC_TRY_LINK([#include <krb5.h>],
4231       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4232       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4233       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4234
4235   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4236     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4237                [Whether the function krb5_principal_get_realm is defined])
4238   fi
4239
4240   AC_CACHE_CHECK([for krb5_princ_realm],
4241                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4242     AC_TRY_LINK([#include <krb5.h>],
4243       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
4244       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
4245       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
4246
4247   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
4248     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
4249                [Whether the macro krb5_princ_realm is defined])
4250   fi
4251
4252   #
4253   #
4254   # Now the decisions whether we can support krb5
4255   #
4256   # NOTE: all tests should be done before this block!
4257   #
4258   #
4259   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4260     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4261     use_ads=no
4262   fi
4263
4264   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
4265           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
4266   then
4267     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4268     use_ads=no
4269   fi
4270
4271   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4272           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4273   then
4274     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4275     use_ads=no
4276   fi
4277
4278   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4279           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4280   then
4281     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4282     use_ads=no
4283   fi
4284
4285   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
4286           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
4287   then
4288     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
4289     use_ads=no
4290   fi
4291
4292   if test x"$smb_krb5_ticket_has_keyinfo" != x"yes" ; then
4293
4294       # We only need the following functions if we can't get the enctype
4295       # and kvno out of the ticket directly (ie. on Heimdal).
4296
4297       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
4298       then
4299         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
4300         use_ads=no
4301       fi
4302
4303       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
4304       then
4305         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
4306         use_ads=no
4307       fi
4308
4309   fi
4310
4311   if test x"$use_ads" = x"yes"; then
4312     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4313     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4314     if test x"$have_gssapi" = x"yes"; then
4315       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
4316     fi
4317   else
4318     if test x"$with_ads_support" = x"yes"; then
4319         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4320     else
4321         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4322     fi
4323     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4324     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4325     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4326     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4327     KRB5_LIBS=""
4328     with_ads_support=no
4329   fi
4330   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4331   AC_MSG_RESULT([$use_ads])
4332
4333 LIBS="$ac_save_LIBS"
4334 fi
4335
4336 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4337 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4338
4339
4340 ########################################################
4341 # Compile with DNS Updates support?
4342
4343 with_dnsupdate_support=no
4344 AC_MSG_CHECKING([whether to enable DNS Updates support])
4345
4346 AC_ARG_WITH(dnsupdate,
4347 [  --with-dnsupdate        Enable DNS Updates support (default no)],
4348 [ case "$withval" in
4349     yes|no)
4350         with_dnsupdate_support=$withval
4351         ;;
4352   esac ])
4353
4354 AC_MSG_RESULT($with_dnsupdate_support)
4355
4356 if test x"$with_dnsupdate_support" != x"no"; then
4357
4358   ################################################################
4359   # first test for Active Directory support being enabled
4360   #if test x"$with_ads_support" = x"no"; then
4361   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
4362   #             with_dnsupdate_support=no
4363   #fi           
4364   ##################################################################
4365   # then test for uuid.h (necessary to generate unique DNS keynames
4366   # (uuid.h is required for this test)
4367   AC_CHECK_HEADERS(uuid/uuid.h)
4368
4369   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4370         if test x"$with_dnsupdate_support" = x"yes"; then
4371          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4372         else
4373          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4374         fi
4375         with_dnsupdate_support=no
4376   fi
4377 fi
4378
4379 if test x"$with_dnsupdate_support" != x"no"; then
4380
4381   ########################################################
4382   # Now see if we can find the uuid libs in standard paths
4383   # On some systems, the uuid API is in libc, so we have to
4384   # be careful not to insert a spurious -luuid.
4385
4386   UUID_LIBS=""
4387   AC_LIBTESTFUNC(uuid, uuid_generate,
4388           [
4389             case " $LIBS " in
4390                 *\ -luuid\ *)
4391                 UUID_LIBS="-luuid"
4392                 SMB_REMOVE_LIB(uuid)
4393                 ;;
4394             esac
4395
4396             with_dnsupdate_support=yes
4397             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4398         ],
4399         [
4400             if test x"$with_dnsupdate_support" = x"yes"; then
4401                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4402             else
4403                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4404             fi
4405             with_dnsupdate_support=no
4406         ])
4407 fi
4408
4409 #################################################
4410 # check for automount support
4411 AC_MSG_CHECKING(whether to use automount)
4412 AC_ARG_WITH(automount,
4413 [  --with-automount        Include automount support (default=no)],
4414 [ case "$withval" in
4415   yes)
4416     AC_MSG_RESULT(yes)
4417     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4418     ;;
4419   *)
4420     AC_MSG_RESULT(no)
4421     ;;
4422   esac ],
4423   AC_MSG_RESULT(no)
4424 )
4425
4426 #################################################
4427 # check for smbmount support
4428 AC_MSG_CHECKING(whether to use smbmount)
4429 AC_ARG_WITH(smbmount,
4430 [  --with-smbmount         Include smbmount (Linux only) support (default=no)],
4431 [ case "$withval" in
4432   yes)
4433         case "$host_os" in
4434         *linux*)
4435                 AC_MSG_RESULT(yes)
4436                 AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
4437                 SMBMOUNT_PROGS="bin/smbmount bin/smbmnt bin/smbumount"
4438                 ;;
4439         *)
4440                 AC_MSG_ERROR(not on a linux system!)
4441                 ;;
4442         esac
4443     ;;
4444   *)
4445     AC_MSG_RESULT(no)
4446     ;;
4447   esac ],
4448   AC_MSG_RESULT(no)
4449 )
4450
4451 #################################################
4452 # check for mount- and umount.cifs support
4453 CIFSMOUNT_PROGS=""
4454 INSTALL_CIFSMOUNT=""
4455 UNINSTALL_CIFSMOUNT=""
4456 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4457 AC_ARG_WITH(cifsmount,
4458 [  --with-cifsmount        Include mount.cifs and umount.cifs (Linux only) support (default=yes)],
4459 [ case "$withval" in
4460   no)
4461         AC_MSG_RESULT(no)
4462         ;;
4463   *)
4464         case "$host_os" in
4465         *linux*)
4466                 AC_MSG_RESULT(yes)
4467                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4468                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4469                 INSTALL_CIFSMOUNT="installcifsmount"
4470                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4471                 ;;
4472         *)
4473                 AC_MSG_ERROR(not on a linux system!)
4474                 ;;
4475         esac
4476     ;;
4477   esac ],
4478 [ case "$host_os" in
4479   *linux*)
4480         AC_MSG_RESULT(yes)
4481         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4482         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4483         INSTALL_CIFSMOUNT="installcifsmount"
4484         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4485         ;;
4486   *)
4487         AC_MSG_RESULT(no)
4488         ;;
4489   esac ]
4490 )
4491
4492 #################################################
4493 # check for cifs.spnego support
4494 AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
4495 CIFSSPNEGO_PROGS=""
4496 INSTALL_CIFSSPNEGO=""
4497 UNINSTALL_CIFSSPNEGO=""
4498 AC_MSG_CHECKING(whether to build cifs.spnego)
4499 AC_ARG_WITH(cifsspnego,
4500 [  --with-cifsspnego       Include cifs.spnego (Linux only) support (default=no)],
4501 [ case "$withval" in
4502   no)
4503         AC_MSG_RESULT(no)
4504         ;;
4505   *)
4506         case "$host_os" in
4507         *linux*)
4508                 if test x"$use_ads" != x"yes"; then
4509                         AC_MSG_ERROR(ADS support should be enabled for building cifs.spnego)
4510                 elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4511                         AC_MSG_ERROR(keyutils package is required for cifs.spnego)
4512                 else
4513                         AC_MSG_RESULT(yes)
4514                         AC_DEFINE(WITH_CIFSSPNEGO,1,[whether to build cifs.spnego])
4515                         CIFSSPNEGO_PROGS="bin/cifs.spnego"
4516                         INSTALL_CIFSSPNEGO="installcifsspnego"
4517                         UNINSTALL_CIFSSPNEGO="uninstallcifsspnego"
4518                 fi
4519                 ;;
4520         *)
4521                 AC_MSG_ERROR(not on a linux system!)
4522                 ;;
4523         esac
4524     ;;
4525   esac ],
4526 [
4527   AC_MSG_RESULT(no)
4528   ]
4529 )
4530
4531
4532 #################################################
4533 # Check for a PAM clear-text auth, accounts, password
4534 # and session support. Most PAM implementations keep their
4535 # headers in /usr/include/security. Darwin keeps its in
4536 # /usr/include/pam.
4537
4538 with_pam_for_crypt=no
4539 try_pam=no
4540 AC_MSG_CHECKING(whether to try PAM support)
4541 AC_ARG_WITH(pam,
4542 [  --with-pam              Include PAM support (default=no)],
4543 [ case "$withval" in
4544   yes|no)
4545     try_pam=$withval
4546     ;;
4547   esac
4548 ])
4549 AC_MSG_RESULT([$try_pam])
4550
4551 use_pam=no
4552 create_pam_modules=no
4553 if test x"${try_pam}" != x"no";then
4554         use_pam=yes
4555         create_pam_modules=yes
4556
4557         # Most systems have PAM headers in /usr/include/security, but Darwin
4558         # has them in /usr/include/pam.
4559         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4560         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4561                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4562                 if test x"${try_pam}" = x"yes";then
4563                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4564                 fi
4565                 use_pam=no
4566                 create_pam_modules=no
4567         fi
4568
4569         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4570         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4571                 if test x"${try_pam}" = x"yes";then
4572                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4573                 fi
4574                 use_pam=no
4575                 create_pam_modules=no
4576         fi
4577
4578         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4579                 #if HAVE_SECURITY_PAM_APPL_H
4580                 #include <security/pam_appl.h>
4581                 #endif
4582                 #if HAVE_PAM_PAM_APPL_H
4583                 #include <pam/pam_appl.h>
4584                 #endif
4585         ]])
4586         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4587                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4588                 if test x"${try_pam}" = x"yes";then
4589                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4590        fi
4591                 create_pam_modules=no
4592     fi
4593
4594         if test x"$use_pam" = x"yes"; then
4595     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4596                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4597                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4598     with_pam_for_crypt=yes
4599
4600                 if test x"$create_pam_modules" = x"yes"; then
4601                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4602                         # this checks are optional,
4603                         # we don't care about the results here
4604                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4605                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4606                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4607                 else
4608                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4609                 fi
4610         fi
4611         AC_MSG_CHECKING(whether to use PAM support)
4612         AC_MSG_RESULT([$use_pam])
4613
4614         AC_MSG_CHECKING(whether to have PAM MODULES support)
4615         AC_MSG_RESULT([$create_pam_modules])
4616 fi # try_pam != no
4617
4618 #################################################
4619 # check for pam_smbpass support
4620 PAM_MODULES=""
4621 INSTALL_PAM_MODULES=""
4622 UNINSTALL_PAM_MODULES=""
4623 AC_MSG_CHECKING(whether to use pam_smbpass)
4624 AC_ARG_WITH(pam_smbpass,
4625 [  --with-pam_smbpass      Build PAM module for authenticating against passdb backends (default=no)],
4626 [ case "$withval" in
4627   yes)
4628     AC_MSG_RESULT(yes)
4629
4630        # Conditions under which pam_smbpass should not be built.
4631
4632        if test x"$BLDSHARED" != x"true"; then
4633           AC_MSG_ERROR([No support for shared modules])
4634        elif test x"$create_pam_modules" != x"yes"; then
4635           AC_MSG_ERROR([No support for PAM MODULES])
4636        else
4637           PAM_MODULES="pam_smbpass"
4638           INSTALL_PAM_MODULES="installpammodules"
4639           UNINSTALL_PAM_MODULES="uninstallpammodules"
4640        fi
4641     ;;
4642   *)
4643     AC_MSG_RESULT(no)
4644     ;;
4645   esac ],
4646   AC_MSG_RESULT(no)
4647 )
4648
4649
4650 ###############################################
4651 # test for where we get crypt() from
4652 AC_SEARCH_LIBS(crypt, [crypt],
4653   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
4654   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
4655
4656 ##
4657 ## moved after the check for -lcrypt in order to
4658 ## ensure that the necessary libraries are included
4659 ## check checking for truncated salt.  Wrapped by the
4660 ## $with_pam_for_crypt variable as above   --jerry
4661 ##
4662 if test $with_pam_for_crypt = no; then
4663 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4664 crypt_LIBS="$LIBS"
4665 LIBS="$AUTH_LIBS $LIBS"
4666 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
4667         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4668 LIBS="$crypt_LIBS"])
4669 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4670         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4671 fi
4672 fi
4673
4674 #################################################
4675 # check for a NISPLUS_HOME support
4676 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4677 AC_ARG_WITH(nisplus-home,
4678 [  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
4679 [ case "$withval" in
4680   yes)
4681     AC_MSG_RESULT(yes)
4682     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4683     ;;
4684   *)
4685     AC_MSG_RESULT(no)
4686     ;;
4687   esac ],
4688   AC_MSG_RESULT(no)
4689 )
4690
4691 #################################################
4692 # check for syslog logging
4693 AC_MSG_CHECKING(whether to use syslog logging)
4694 AC_ARG_WITH(syslog,
4695 [  --with-syslog           Include experimental SYSLOG support (default=no)],
4696 [ case "$withval" in
4697   yes)
4698     AC_MSG_RESULT(yes)
4699     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4700     ;;
4701   *)
4702     AC_MSG_RESULT(no)
4703     ;;
4704   esac ],
4705   AC_MSG_RESULT(no)
4706 )
4707
4708 #################################################
4709 # check for experimental disk-quotas support
4710
4711 samba_cv_WITH_QUOTAS=auto
4712 samba_cv_TRY_QUOTAS=no
4713 samba_cv_RUN_QUOTA_TESTS=auto
4714 samba_cv_WITH_SYS_QUOTAS=auto
4715 samba_cv_TRY_SYS_QUOTAS=auto
4716 samba_cv_SYSQUOTA_FOUND=no
4717
4718 AC_MSG_CHECKING(whether to try disk-quotas support)
4719 AC_ARG_WITH(quotas,
4720 [  --with-quotas           Include disk-quota support (default=no)],
4721 [ case "$withval" in
4722   yes)
4723     AC_MSG_RESULT(yes)
4724     samba_cv_WITH_QUOTAS=yes
4725     samba_cv_TRY_QUOTAS=yes
4726     samba_cv_RUN_QUOTA_TESTS=yes
4727     #set sys quotas to auto in this case
4728     samba_cv_TRY_SYS_QUOTAS=auto
4729     ;;
4730   auto)
4731     AC_MSG_RESULT(auto)
4732     samba_cv_WITH_QUOTAS=auto
4733     samba_cv_TRY_QUOTAS=auto
4734     samba_cv_RUN_QUOTA_TESTS=auto
4735     #set sys quotas to auto in this case
4736     samba_cv_TRY_SYS_QUOTAS=auto
4737     ;;
4738   no)
4739     AC_MSG_RESULT(no)
4740     samba_cv_WITH_QUOTAS=no
4741     samba_cv_TRY_QUOTAS=no
4742     samba_cv_RUN_QUOTA_TESTS=no
4743     ;;
4744   *)
4745     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4746     ;;
4747   esac ],
4748   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4749 )
4750
4751 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4752 AC_ARG_WITH(sys-quotas,
4753 [  --with-sys-quotas       Include lib/sysquotas.c support (default=auto)],
4754 [ case "$withval" in
4755   yes)
4756     AC_MSG_RESULT(yes)
4757     samba_cv_WITH_SYS_QUOTAS=yes
4758     samba_cv_TRY_SYS_QUOTAS=yes
4759     samba_cv_RUN_QUOTA_TESTS=yes
4760     ;;
4761   auto)
4762     AC_MSG_RESULT(auto)
4763     samba_cv_WITH_SYS_QUOTAS=auto
4764     samba_cv_TRY_SYS_QUOTAS=auto
4765     samba_cv_RUN_QUOTA_TESTS=auto
4766     ;;
4767   no)
4768     AC_MSG_RESULT(no)
4769     samba_cv_WITH_SYS_QUOTAS=no
4770     samba_cv_TRY_SYS_QUOTAS=no
4771     ;;
4772   *)
4773     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4774     ;;
4775   esac ],
4776   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4777 )
4778
4779 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4780 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4781   case "$host_os" in
4782         *linux*)
4783             AC_MSG_RESULT(yes)
4784             samba_cv_TRY_SYS_QUOTAS=yes
4785             samba_cv_RUN_QUOTA_TESTS=yes
4786             ;;
4787         *)
4788             AC_MSG_RESULT(no)
4789             samba_cv_TRY_SYS_QUOTAS=no
4790             ;;
4791   esac
4792 fi
4793
4794 #############################################
4795 # only check for quota stuff if --with-quotas
4796 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4797
4798 case "$host_os" in
4799         # on linux we didn't need to test we have builtin support
4800         *linux*)
4801             samba_cv_SYSQUOTA_FOUND=yes
4802             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4803             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4804             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4805             AC_MSG_RESULT(yes)
4806
4807             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4808             samba_cv_found_xfs_header=yes
4809             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4810             AC_MSG_RESULT(yes)
4811             ;;
4812         *solaris*)
4813             # need to set this define when using static linking (BUG 1473)
4814             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4815             ;;
4816         *)
4817             ;;
4818 esac
4819
4820 # some broken header files need this
4821 AC_CHECK_HEADER(asm/types.h,[
4822             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4823             AC_ADD_INCLUDE(<asm/types.h>)
4824             ])
4825
4826 # For quotas on Veritas VxFS filesystems
4827 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4828
4829 # For quotas on Linux XFS filesystems
4830 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4831
4832 # For sys/quota.h and linux/quota.h
4833 AC_CHECK_HEADERS(sys/quota.h)
4834
4835 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4836 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4837 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4838 AC_TRY_COMPILE([
4839 #include "confdefs.h"
4840 #ifdef HAVE_SYS_TYPES_H
4841 #include <sys/types.h>
4842 #endif
4843 #ifdef HAVE_ASM_TYPES_H
4844 #include <asm/types.h>
4845 #endif
4846 #include <sys/quota.h>
4847 ],[int i = Q_XGETQUOTA;],
4848 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4849 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4850         samba_cv_found_xfs_header=yes
4851 fi
4852 fi
4853
4854 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4855 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4856 AC_TRY_COMPILE([
4857 #include "confdefs.h"
4858 #ifdef HAVE_SYS_QUOTA_H
4859 #include <sys/quota.h>
4860 #endif
4861 ],[
4862 struct dqblk D;
4863 D.dqb_fsoftlimit = 0;],
4864 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4865 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4866         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4867 fi
4868
4869 ##################
4870 # look for a working quota system
4871
4872 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4873 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4874 AC_TRY_RUN_STRICT([
4875 #define HAVE_QUOTACTL_4A 1
4876 #define AUTOCONF_TEST 1
4877 #include "confdefs.h"
4878 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4879            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4880 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4881     samba_cv_SYSQUOTA_FOUND=yes;
4882     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4883     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4884 fi
4885 fi
4886
4887 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4888 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4889 AC_TRY_RUN_STRICT([
4890 #define HAVE_QUOTACTL_4B 1
4891 #define AUTOCONF_TEST 1
4892 #include "confdefs.h"
4893 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4894            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4895 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4896     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4897     samba_cv_SYSQUOTA_FOUND=yes;
4898     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4899     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4900 fi
4901 fi
4902
4903 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4904 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4905 AC_TRY_RUN_STRICT([
4906 #define HAVE_QUOTACTL_3 1
4907 #define AUTOCONF_TEST 1
4908 #include "confdefs.h"
4909 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4910            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4911 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4912     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4913     samba_cv_SYSQUOTA_FOUND=yes;
4914     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4915     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4916 fi
4917 fi
4918
4919 #################################################
4920 # check for mntent.h and struct mntent
4921 AC_CHECK_HEADERS(mntent.h)
4922 #################################################
4923 # check for setmntent,getmntent,endmntent
4924 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4925
4926 #################################################
4927 # check for devnm.h and struct mntent
4928 AC_CHECK_HEADERS(devnm.h)
4929 #################################################
4930 # check for devnm
4931 AC_CHECK_FUNCS(devnm)
4932
4933 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4934     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4935         # if --with-sys-quotas=yes then build it
4936         # you have can use the get/set quota command smb.conf
4937         # options then
4938         samba_cv_SYSQUOTA_FOUND=auto
4939     fi
4940     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4941         # if --with-sys-quotas=yes then build it
4942         # you have can use the get/set quota command smb.conf
4943         # options then
4944         samba_cv_TRY_SYS_QUOTAS=auto
4945     fi
4946 fi
4947
4948 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4949 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4950 SAVE_CPPFLAGS="$CPPFLAGS"
4951 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4952 AC_TRY_COMPILE([
4953 #include "confdefs.h"
4954 #define NO_PROTO_H 1
4955 #define NO_CONFIG_H 1
4956 #define HAVE_SYS_QUOTAS 1
4957 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4958 #include "${srcdir-.}/lib/sysquotas.c"
4959 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4960 CPPFLAGS="$SAVE_CPPFLAGS"
4961 ])
4962 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4963 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4964     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4965         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4966         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4967         samba_cv_WE_USE_SYS_QUOTAS=yes
4968         AC_MSG_RESULT(yes)
4969     else
4970         AC_MSG_RESULT(no)
4971     fi
4972 fi
4973 fi
4974
4975 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4976 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4977 SAVE_CPPFLAGS="$CPPFLAGS"
4978 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4979 AC_TRY_COMPILE([
4980 #include "confdefs.h"
4981 #define NO_PROTO_H 1
4982 #define NO_CONFIG_H 1
4983 #define HAVE_SYS_QUOTAS 1
4984 #define HAVE_XFS_QUOTAS 1
4985 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4986 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4987 CPPFLAGS="$SAVE_CPPFLAGS"
4988 ])
4989 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4990     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4991         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4992     fi
4993 fi
4994 fi
4995
4996 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4997 SAVE_CPPFLAGS="$CPPFLAGS"
4998 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4999 AC_TRY_COMPILE([
5000 #include "confdefs.h"
5001 #define NO_PROTO_H 1
5002 #define NO_CONFIG_H 1
5003 #include "${srcdir-.}/smbd/quotas.c"
5004 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
5005 CPPFLAGS="$SAVE_CPPFLAGS"
5006 ])
5007 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
5008 AC_MSG_CHECKING(whether to use the old quota support)
5009     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
5010       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
5011         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
5012         AC_MSG_RESULT(yes)
5013       else
5014         AC_MSG_RESULT(no)
5015       fi
5016     else
5017       AC_MSG_RESULT(no)
5018     fi
5019 fi
5020
5021 ####################
5022 # End of quota check samba_cv_RUN_QUOTA_TESTS
5023 fi
5024
5025 #################################################
5026 # check for experimental utmp accounting
5027
5028 AC_MSG_CHECKING(whether to support utmp accounting)
5029 WITH_UTMP=yes
5030 AC_ARG_WITH(utmp,
5031 [  --with-utmp             Include utmp accounting (default, if supported by OS)],
5032 [ case "$withval" in
5033   no)
5034                 WITH_UTMP=no
5035                 ;;
5036   *)
5037                 WITH_UTMP=yes
5038                 ;;
5039   esac ],
5040 )
5041
5042 # utmp requires utmp.h
5043 # Note similar check earlier, when checking utmp details.
5044
5045 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
5046         utmp_no_reason=", no utmp.h on $host_os"
5047         WITH_UTMP=no
5048 fi
5049
5050 # Display test results
5051
5052 if test x"$WITH_UTMP" = x"yes"; then
5053         AC_MSG_RESULT(yes)
5054         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
5055 else
5056         AC_MSG_RESULT(no$utmp_no_reason)
5057 fi
5058
5059 INSTALLLIBCMD_SH=:
5060 INSTALLLIBCMD_A=:
5061 UNINSTALLLIBCMD_SH=:
5062 UNINSTALLLIBCMD_A=:
5063
5064 if test $BLDSHARED = true; then
5065         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
5066         UNINSTALLLIBCMD_SH="rm -f"
5067 fi
5068 if test $enable_static = yes; then
5069         INSTALLLIBCMD_A="\$(INSTALLCMD)"
5070         UNINSTALLLIBCMD_A="rm -f"
5071 fi
5072
5073 #################################################
5074 # should we build libnetapi?
5075 INSTALL_LIBNETAPI=
5076 UNINSTALL_LIBNETAPI=
5077 LIBNETAPI_SHARED=
5078 LIBNETAPI=
5079 AC_MSG_CHECKING(whether to build the libnetapi shared library)
5080 AC_ARG_WITH(libnetapi,
5081 [  --with-libnetapi         Build the libnetapi shared library (default=no undefined API)],
5082 [ case "$withval" in
5083   *)
5084      AC_MSG_RESULT(no)
5085      ;;
5086   yes)
5087      if test $BLDSHARED = true; then
5088         LIBNETAPI_SHARED=bin/libnetapi.$SHLIBEXT
5089         LIBNETAPI=libnetapi
5090         AC_MSG_RESULT(yes)
5091      else
5092         enable_static=yes
5093         AC_MSG_RESULT(no shared library support -- will supply static library)
5094      fi
5095      if test $enable_static = yes; then
5096         LIBNETAPI=libnetapi
5097      fi
5098      INSTALL_LIBNETAPI=installlibnetapi
5099      UNINSTALL_LIBNETAPI=uninstalllibnetapi
5100      ;;
5101   esac ],
5102 [
5103 # if unspecified, default is to built it if possible.
5104   if test $BLDSHARED = true; then
5105      LIBNETAPI_SHARED=bin/libnetapi.$SHLIBEXT
5106      LIBNETAPI=libnetapi
5107      AC_MSG_RESULT(yes)
5108    else
5109      enable_static=yes
5110      AC_MSG_RESULT(no shared library support -- will supply static library)
5111    fi
5112    if test $enable_static = yes; then
5113      LIBNETAPI=libnetapi
5114   fi]
5115   INSTALL_LIBNETAPI=installlibnetapi
5116 )
5117
5118 #################################################
5119 # should we build libaddns?
5120 INSTALL_LIBADDNS=
5121 UNINSTALL_LIBADDNS=
5122 LIBADDNS_SHARED=
5123 LIBADDNS=
5124 AC_MSG_CHECKING(whether to build the libaddns shared library)
5125 AC_ARG_WITH(libaddns,
5126 [  --with-libaddns         Build the libaddns shared library (default=no undefined API)],
5127 [ case "$withval" in
5128   *)
5129      AC_MSG_RESULT(no)
5130      ;;
5131   yes)
5132      if test $BLDSHARED = true; then
5133         LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
5134         LIBADDNS=libaddns
5135         AC_MSG_RESULT(yes)
5136      else
5137         enable_static=yes
5138         AC_MSG_RESULT(no shared library support -- will supply static library)
5139      fi
5140      if test $enable_static = yes; then
5141         LIBADDNS=libaddns
5142      fi
5143      INSTALL_LIBADDNS=installlibaddns
5144      UNINSTALL_LIBADDNS=uninstalllibaddns
5145      ;;
5146   esac ]
5147 )
5148
5149 #################################################
5150 # should we build libsmbclient?
5151 INSTALL_LIBSMBCLIENT=
5152 UNINSTALL_LIBSMBCLIENT=
5153 LIBSMBCLIENT_SHARED=
5154 LIBSMBCLIENT=
5155 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
5156 AC_ARG_WITH(libsmbclient,
5157 [  --with-libsmbclient     Build the libsmbclient shared library (default=yes if shared libs supported)],
5158 [ case "$withval" in
5159   no)
5160      AC_MSG_RESULT(no)
5161      ;;
5162   *)
5163      if test $BLDSHARED = true; then
5164         LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
5165         LIBSMBCLIENT=libsmbclient
5166         AC_MSG_RESULT(yes)
5167      else
5168         enable_static=yes
5169         AC_MSG_RESULT(no shared library support -- will supply static library)
5170      fi
5171      if test $enable_static = yes; then
5172         LIBSMBCLIENT=libsmbclient
5173      fi
5174      INSTALL_LIBSMBCLIENT=installclientlib
5175      UNINSTALL_LIBSMBCLIENT=uninstallclientlib
5176      ;;
5177   esac ],
5178 [
5179 # if unspecified, default is to built it if possible.
5180   if test $BLDSHARED = true; then
5181      LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
5182      LIBSMBCLIENT=libsmbclient
5183      AC_MSG_RESULT(yes)
5184    else
5185      enable_static=yes
5186      AC_MSG_RESULT(no shared library support -- will supply static library)
5187    fi
5188    if test $enable_static = yes; then
5189      LIBSMBCLIENT=libsmbclient
5190   fi]
5191   INSTALL_LIBSMBCLIENT=installclientlib
5192   UNINSTALL_LIBSMBCLIENT=uninstallclientlib
5193 )
5194
5195 INSTALL_LIBSMBSHAREMODES=
5196 LIBSMBSHAREMODES_SHARED=
5197 LIBSMBSHAREMODES=
5198 AC_MSG_CHECKING(whether to build the libsmbsharemodes shared library)
5199 AC_ARG_WITH(libsmbsharemodes,
5200 [  --with-libsmbsharemodes     Build the libsmbsharemodes shared library (default=yes if shared libs supported)],
5201 [ case "$withval" in
5202   no)
5203      AC_MSG_RESULT(no)
5204      ;;
5205   *)
5206      if test $BLDSHARED = true; then
5207         LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
5208         LIBSMBSHAREMODES=libsmbsharemodes
5209         AC_MSG_RESULT(yes)
5210      else
5211         enable_static=yes
5212         AC_MSG_RESULT(no shared library support -- will supply static library)
5213      fi
5214      if test $enable_static = yes; then
5215         LIBSMBSHAREMODES=libsmbsharemodes
5216      fi
5217      INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
5218      UNINSTALL_LIBSMBSHAREMODES=uninstalllibsmbsharemodes
5219      ;;
5220   esac ],
5221 [
5222 # if unspecified, default is to built it if possible.
5223   if test $BLDSHARED = true; then
5224      LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
5225      LIBSMBSHAREMODES=libsmbsharemodes
5226      AC_MSG_RESULT(yes)
5227    else
5228      enable_static=yes
5229      AC_MSG_RESULT(no shared library support -- will supply static library)
5230    fi
5231    if test $enable_static = yes; then
5232      LIBSMBSHAREMODES=libsmbsharemodes
5233   fi]
5234   INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
5235 )
5236
5237 #################################################
5238 # these tests are taken from the GNU fileutils package
5239 AC_CHECKING(how to get filesystem space usage)
5240 space=no
5241
5242 # Test for statvfs64.
5243 if test $space = no; then
5244   # SVR4
5245   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
5246   [AC_TRY_RUN([
5247 #if defined(HAVE_UNISTD_H)
5248 #include <unistd.h>
5249 #endif
5250 #include <sys/types.h>
5251 #include <sys/statvfs.h>
5252   main ()
5253   {
5254     struct statvfs64 fsd;
5255     exit (statvfs64 (".", &fsd));
5256   }],
5257   fu_cv_sys_stat_statvfs64=yes,
5258   fu_cv_sys_stat_statvfs64=no,
5259   fu_cv_sys_stat_statvfs64=cross)])
5260   if test $fu_cv_sys_stat_statvfs64 = yes; then
5261     space=yes
5262     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
5263   fi
5264 fi
5265
5266 # Perform only the link test since it seems there are no variants of the
5267 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
5268 # because that got a false positive on SCO OSR5.  Adding the declaration
5269 # of a `struct statvfs' causes this test to fail (as it should) on such
5270 # systems.  That system is reported to work fine with STAT_STATFS4 which
5271 # is what it gets when this test fails.
5272 if test $space = no; then
5273   # SVR4
5274   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
5275                  [AC_TRY_LINK([#include <sys/types.h>
5276 #include <sys/statvfs.h>],
5277                               [struct statvfs fsd; statvfs (0, &fsd);],
5278                               fu_cv_sys_stat_statvfs=yes,
5279                               fu_cv_sys_stat_statvfs=no)])
5280   if test $fu_cv_sys_stat_statvfs = yes; then
5281     space=yes
5282     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
5283   fi
5284 fi
5285
5286 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
5287 # This is not the case on ancient Linux systems.
5288
5289 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
5290     AC_TRY_COMPILE([#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
5291         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
5292 if test x"$samba_cv_fsid_int" = x"yes"; then
5293     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
5294 fi
5295
5296 if test $space = no; then
5297   # DEC Alpha running OSF/1
5298   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
5299   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
5300   [AC_TRY_RUN([
5301 #include <sys/param.h>
5302 #include <sys/types.h>
5303 #include <sys/mount.h>
5304   main ()
5305   {
5306     struct statfs fsd;
5307     fsd.f_fsize = 0;
5308     exit (statfs (".", &fsd, sizeof (struct statfs)));
5309   }],
5310   fu_cv_sys_stat_statfs3_osf1=yes,
5311   fu_cv_sys_stat_statfs3_osf1=no,
5312   fu_cv_sys_stat_statfs3_osf1=no)])
5313   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5314   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5315     space=yes
5316     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5317   fi
5318 fi
5319
5320 if test $space = no; then
5321 # AIX
5322   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5323 member (AIX, 4.3BSD)])
5324   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5325   [AC_TRY_RUN([
5326 #ifdef HAVE_SYS_PARAM_H
5327 #include <sys/param.h>
5328 #endif
5329 #ifdef HAVE_SYS_MOUNT_H
5330 #include <sys/mount.h>
5331 #endif
5332 #ifdef HAVE_SYS_VFS_H
5333 #include <sys/vfs.h>
5334 #endif
5335   main ()
5336   {
5337   struct statfs fsd;
5338   fsd.f_bsize = 0;
5339   exit (statfs (".", &fsd));
5340   }],
5341   fu_cv_sys_stat_statfs2_bsize=yes,
5342   fu_cv_sys_stat_statfs2_bsize=no,
5343   fu_cv_sys_stat_statfs2_bsize=no)])
5344   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5345   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5346     space=yes
5347     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5348   fi
5349 fi
5350
5351 if test $space = no; then
5352 # SVR3
5353   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5354   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5355   [AC_TRY_RUN([#include <sys/types.h>
5356 #include <sys/statfs.h>
5357   main ()
5358   {
5359   struct statfs fsd;
5360   exit (statfs (".", &fsd, sizeof fsd, 0));
5361   }],
5362     fu_cv_sys_stat_statfs4=yes,
5363     fu_cv_sys_stat_statfs4=no,
5364     fu_cv_sys_stat_statfs4=no)])
5365   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5366   if test $fu_cv_sys_stat_statfs4 = yes; then
5367     space=yes
5368     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5369   fi
5370 fi
5371
5372 if test $space = no; then
5373 # 4.4BSD and NetBSD
5374   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5375 member (4.4BSD and NetBSD)])
5376   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5377   [AC_TRY_RUN([#include <sys/types.h>
5378 #ifdef HAVE_SYS_PARAM_H
5379 #include <sys/param.h>
5380 #endif
5381 #ifdef HAVE_SYS_MOUNT_H
5382 #include <sys/mount.h>
5383 #endif
5384   main ()
5385   {
5386   struct statfs fsd;
5387   fsd.f_fsize = 0;
5388   exit (statfs (".", &fsd));
5389   }],
5390   fu_cv_sys_stat_statfs2_fsize=yes,
5391   fu_cv_sys_stat_statfs2_fsize=no,
5392   fu_cv_sys_stat_statfs2_fsize=no)])
5393   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5394   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5395     space=yes
5396         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5397   fi
5398 fi
5399
5400 if test $space = no; then
5401   # Ultrix
5402   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5403   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5404   [AC_TRY_RUN([#include <sys/types.h>
5405 #ifdef HAVE_SYS_PARAM_H
5406 #include <sys/param.h>
5407 #endif
5408 #ifdef HAVE_SYS_MOUNT_H
5409 #include <sys/mount.h>
5410 #endif
5411 #ifdef HAVE_SYS_FS_TYPES_H
5412 #include <sys/fs_types.h>
5413 #endif
5414   main ()
5415   {
5416   struct fs_data fsd;
5417   /* Ultrix's statfs returns 1 for success,
5418      0 for not mounted, -1 for failure.  */
5419   exit (statfs (".", &fsd) != 1);
5420   }],
5421   fu_cv_sys_stat_fs_data=yes,
5422   fu_cv_sys_stat_fs_data=no,
5423   fu_cv_sys_stat_fs_data=no)])
5424   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5425   if test $fu_cv_sys_stat_fs_data = yes; then
5426     space=yes
5427     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5428   fi
5429 fi
5430
5431 #
5432 # As a gating factor for large file support, in order to
5433 # use <4GB files we must have the following minimal support
5434 # available.
5435 # long long, and a 64 bit off_t or off64_t.
5436 # If we don't have all of these then disable large
5437 # file support.
5438 #
5439 AC_MSG_CHECKING([if large file support can be enabled])
5440 AC_TRY_COMPILE([
5441 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5442 #include <sys/types.h>
5443 #else
5444 __COMPILE_ERROR_
5445 #endif
5446 ],
5447 [int i],
5448 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5449 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5450         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5451 fi
5452 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5453
5454 #################################################
5455 # check for cluster extensions
5456
5457 AC_MSG_CHECKING(whether to include cluster support)
5458 AC_ARG_WITH(cluster-support,
5459 [  --with-cluster-support  Enable cluster extensions (default=no)])
5460 if test "x$with_cluster_support" = "xyes"; then
5461     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5462     AC_MSG_RESULT(yes)
5463 else
5464     AC_MSG_RESULT(no)
5465 fi
5466
5467
5468 #################################################
5469 # check for ACL support
5470
5471 AC_MSG_CHECKING(whether to support ACLs)
5472 AC_ARG_WITH(acl-support,
5473 [  --with-acl-support      Include ACL support (default=auto)],
5474 [ case "$withval" in
5475         yes|no)
5476                 with_acl_support="$withval"
5477                 ;;
5478   esac ])
5479
5480 if test x"$with_acl_support" = x ; then
5481         with_acl_support="auto"
5482 fi
5483
5484 AC_MSG_RESULT($with_acl_support)
5485
5486 if test x"$with_acl_support" = x"no"; then
5487         AC_MSG_RESULT(Disabling ACL support)
5488         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5489 else
5490         AC_MSG_NOTICE(checking whether ACL support is available:)
5491         case "$host_os" in
5492         *sysv5*)
5493                 AC_MSG_NOTICE(Using UnixWare ACLs)
5494                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5495                 default_static_modules="$default_static_modules vfs_solarisacl"
5496                 ;;
5497         *solaris*)
5498                 AC_MSG_NOTICE(Using solaris ACLs)
5499                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5500                 ACL_LIBS="$ACL_LIBS -lsec"
5501                 default_static_modules="$default_static_modules vfs_solarisacl"
5502                 ;;
5503         *hpux*)
5504                 AC_MSG_NOTICE(Using HPUX ACLs)
5505                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5506                 default_static_modules="$default_static_modules vfs_hpuxacl"
5507                 ;;
5508         *irix*)
5509                 AC_MSG_NOTICE(Using IRIX ACLs)
5510                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5511                 default_static_modules="$default_static_modules vfs_irixacl"
5512                 ;;
5513         *aix*)
5514                 AC_MSG_NOTICE(Using AIX ACLs)
5515                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5516                 default_static_modules="$default_static_modules vfs_aixacl"
5517                 ;;
5518         *osf*)
5519                 AC_MSG_NOTICE(Using Tru64 ACLs)
5520                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5521                 ACL_LIBS="$ACL_LIBS -lpacl"
5522                 default_static_modules="$default_static_modules vfs_tru64acl"
5523                 ;;
5524         *darwin*)
5525                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5526                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5527                 ;;
5528         *)
5529                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5530                 case "$host_os" in
5531                 *linux*)
5532                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5533                         ;;
5534                 esac
5535                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5536                         acl_LIBS=$LIBS
5537                         LIBS="$LIBS $ACL_LIBS"
5538                         AC_TRY_LINK([
5539                                 #include <sys/types.h>
5540                                 #include <sys/acl.h>
5541                         ],[
5542                                 acl_t acl;
5543                                 int entry_id;
5544                                 acl_entry_t *entry_p;
5545                                 return acl_get_entry(acl, entry_id, entry_p);
5546                         ],
5547                         [samba_cv_HAVE_POSIX_ACLS=yes],
5548                         [samba_cv_HAVE_POSIX_ACLS=no])
5549                         LIBS=$acl_LIBS
5550                 ])
5551                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5552                         AC_MSG_NOTICE(Using posix ACLs)
5553                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5554                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5555                                 acl_LIBS=$LIBS
5556                                 LIBS="$LIBS $ACL_LIBS"
5557                                 AC_TRY_LINK([
5558                                         #include <sys/types.h>
5559                                         #include <sys/acl.h>
5560                                 ],[
5561                                         acl_permset_t permset_d;
5562                                         acl_perm_t perm;
5563                                         return acl_get_perm_np(permset_d, perm);
5564                                 ],
5565                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5566                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5567                                 LIBS=$acl_LIBS
5568                         ])
5569                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5570                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5571                         fi
5572                         default_static_modules="$default_static_modules vfs_posixacl"
5573                 else
5574                         AC_MSG_NOTICE(ACL support is not avaliable)
5575                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5576                 fi
5577                 ;;
5578         esac
5579 fi # with_acl_support
5580
5581
5582
5583 #################################################
5584 # check for AIO support
5585
5586 AC_MSG_CHECKING(whether to support asynchronous io)
5587 AC_ARG_WITH(aio-support,
5588 [  --with-aio-support      Include asynchronous io support (default=no)],
5589 [ case "$withval" in
5590   yes)
5591
5592         AC_MSG_RESULT(yes)
5593         case "$host_os" in
5594         *)
5595                 AIO_LIBS=$LIBS
5596                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5597                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5598                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5599                 aio_LIBS=$LIBS
5600                 LIBS=$AIO_LIBS
5601                 AC_TRY_LINK([#include <sys/types.h>
5602 #include <aio.h>],
5603 [ struct aiocb a; return aio_read(&a);],
5604 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5605                 LIBS=$aio_LIBS])
5606                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5607                 aio_LIBS=$LIBS
5608                 LIBS=$AIO_LIBS
5609                 AC_TRY_LINK([#include <sys/types.h>
5610 #include <aio.h>],
5611 [ struct aiocb64 a; return aio_read64(&a);],
5612 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5613                 LIBS=$aio_LIBS])
5614                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5615                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5616                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5617                         LIBS=$AIO_LIBS
5618                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5619                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5620                         LIBS=$AIO_LIBS
5621                 fi
5622
5623                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5624                         AC_MSG_CHECKING(for aio_read)
5625                         AC_LINK_IFELSE([#include <aio.h>
5626 int main() { struct aiocb a; return aio_read(&a); }],
5627 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5628 [AC_MSG_RESULT(no)])
5629
5630                         AC_MSG_CHECKING(for aio_write)
5631                         AC_LINK_IFELSE([#include <aio.h>
5632 int main() { struct aiocb a; return aio_write(&a); }],
5633 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5634 [AC_MSG_RESULT(no)])
5635
5636                         AC_MSG_CHECKING(for aio_fsync)
5637                         AC_LINK_IFELSE([#include <aio.h>
5638 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5639 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5640 [AC_MSG_RESULT(no)])
5641
5642                         AC_MSG_CHECKING(for aio_return)
5643                         AC_LINK_IFELSE([#include <aio.h>
5644 int main() { struct aiocb a; return aio_return(&a); }],
5645 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5646 [AC_MSG_RESULT(no)])
5647
5648                         AC_MSG_CHECKING(for aio_error)
5649                         AC_LINK_IFELSE([#include <aio.h>
5650 int main() { struct aiocb a; return aio_error(&a); }],
5651 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5652 [AC_MSG_RESULT(no)])
5653
5654                         AC_MSG_CHECKING(for aio_cancel)
5655                         AC_LINK_IFELSE([#include <aio.h>
5656 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5657 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5658 [AC_MSG_RESULT(no)])
5659
5660                         AC_MSG_CHECKING(for aio_suspend)
5661                         AC_LINK_IFELSE([#include <aio.h>
5662 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5663 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5664 [AC_MSG_RESULT(no)])
5665                 fi
5666
5667                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5668                         AC_MSG_CHECKING(for aio_read64)
5669                         AC_LINK_IFELSE([#include <aio.h>
5670 int main() { struct aiocb a; return aio_read64(&a); }],
5671 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5672 [AC_MSG_RESULT(no)])
5673
5674                         AC_MSG_CHECKING(for aio_write64)
5675                         AC_LINK_IFELSE([#include <aio.h>
5676 int main() { struct aiocb a; return aio_write64(&a); }],
5677 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5678 [AC_MSG_RESULT(no)])
5679
5680                         AC_MSG_CHECKING(for aio_fsync64)
5681                         AC_LINK_IFELSE([#include <aio.h>
5682 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5683 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5684 [AC_MSG_RESULT(no)])
5685
5686                         AC_MSG_CHECKING(for aio_return64)
5687                         AC_LINK_IFELSE([#include <aio.h>
5688 int main() { struct aiocb a; return aio_return64(&a); }],
5689 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5690 [AC_MSG_RESULT(no)])
5691
5692                         AC_MSG_CHECKING(for aio_error64)
5693                         AC_LINK_IFELSE([#include <aio.h>
5694 int main() { struct aiocb a; return aio_error64(&a); }],
5695 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5696 [AC_MSG_RESULT(no)])
5697
5698                         AC_MSG_CHECKING(for aio_cancel64)
5699                         AC_LINK_IFELSE([#include <aio.h>
5700 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5701 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5702 [AC_MSG_RESULT(no)])
5703
5704                         AC_MSG_CHECKING(for aio_suspend64)
5705                         AC_LINK_IFELSE([#include <aio.h>
5706 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5707 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5708 [AC_MSG_RESULT(no)])
5709                 fi
5710             ;;
5711         esac
5712         ;;
5713   *)
5714     AC_MSG_RESULT(no)
5715     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5716     ;;
5717   esac ],
5718   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5719   AC_MSG_RESULT(no)
5720 )
5721
5722 #################################################
5723 # check for sendfile support
5724
5725 with_sendfile_support=yes
5726 AC_MSG_CHECKING(whether to check to support sendfile)
5727 AC_ARG_WITH(sendfile-support,
5728 [  --with-sendfile-support Check for sendfile support (default=yes)],
5729 [ case "$withval" in
5730   yes)
5731
5732         AC_MSG_RESULT(yes);
5733
5734         case "$host_os" in
5735         *linux*)
5736                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5737                 AC_TRY_LINK([#include <sys/sendfile.h>],
5738 [\
5739 int tofd, fromfd;
5740 off64_t offset;
5741 size_t total;
5742 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5743 ],
5744 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5745
5746                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5747                 AC_TRY_LINK([#include <sys/sendfile.h>],
5748 [\
5749 int tofd, fromfd;
5750 off_t offset;
5751 size_t total;
5752 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5753 ],
5754 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5755
5756 # Try and cope with broken Linux sendfile....
5757                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5758                 AC_TRY_LINK([\
5759 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5760 #undef _FILE_OFFSET_BITS
5761 #endif
5762 #include <sys/sendfile.h>],
5763 [\
5764 int tofd, fromfd;
5765 off_t offset;
5766 size_t total;
5767 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5768 ],
5769 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5770
5771         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5772                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5773                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5774                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5775         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5776                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5777                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5778                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5779         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5780                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5781                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5782         else
5783                 AC_MSG_RESULT(no);
5784         fi
5785
5786         ;;
5787         *freebsd* | *dragonfly* )
5788                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5789                 AC_TRY_LINK([\
5790 #include <sys/types.h>
5791 #include <unistd.h>
5792 #include <sys/socket.h>
5793 #include <sys/uio.h>],
5794 [\
5795         int fromfd, tofd, ret, total=0;
5796         off_t offset, nwritten;
5797         struct sf_hdtr hdr;
5798         struct iovec hdtrl;
5799         hdr.headers = &hdtrl;
5800         hdr.hdr_cnt = 1;
5801         hdr.trailers = NULL;
5802         hdr.trl_cnt = 0;
5803         hdtrl.iov_base = NULL;
5804         hdtrl.iov_len = 0;
5805         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5806 ],
5807 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5808
5809         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5810                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5811                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5812                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5813         else
5814                 AC_MSG_RESULT(no);
5815         fi
5816         ;;
5817
5818         *hpux*)
5819                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5820                 AC_TRY_LINK([\
5821 #include <sys/socket.h>
5822 #include <sys/uio.h>],
5823 [\
5824         int fromfd, tofd;
5825         size_t total=0;
5826         struct iovec hdtrl[2];
5827         ssize_t nwritten;
5828         off64_t offset;
5829
5830         hdtrl[0].iov_base = 0;
5831         hdtrl[0].iov_len = 0;
5832
5833         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5834 ],
5835 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5836         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5837                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5838                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5839                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5840         else
5841                 AC_MSG_RESULT(no);
5842         fi
5843
5844                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5845                 AC_TRY_LINK([\
5846 #include <sys/socket.h>
5847 #include <sys/uio.h>],
5848 [\
5849         int fromfd, tofd;
5850         size_t total=0;
5851         struct iovec hdtrl[2];
5852         ssize_t nwritten;
5853         off_t offset;
5854
5855         hdtrl[0].iov_base = 0;
5856         hdtrl[0].iov_len = 0;
5857
5858         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5859 ],
5860 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5861         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5862                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5863                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5864                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5865         else
5866                 AC_MSG_RESULT(no);
5867         fi
5868         ;;
5869
5870         *solaris*)
5871                 AC_CHECK_LIB(sendfile,sendfilev)
5872                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5873                 AC_TRY_LINK([\
5874 #include <sys/sendfile.h>],
5875 [\
5876         int sfvcnt;
5877         size_t xferred;
5878         struct sendfilevec vec[2];
5879         ssize_t nwritten;
5880         int tofd;
5881
5882         sfvcnt = 2;
5883
5884         vec[0].sfv_fd = SFV_FD_SELF;
5885         vec[0].sfv_flag = 0;
5886         vec[0].sfv_off = 0;
5887         vec[0].sfv_len = 0;
5888
5889         vec[1].sfv_fd = 0;
5890         vec[1].sfv_flag = 0;
5891         vec[1].sfv_off = 0;
5892         vec[1].sfv_len = 0;
5893         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5894 ],
5895 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5896
5897         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5898                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5899                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5900                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5901         else
5902                 AC_MSG_RESULT(no);
5903         fi
5904
5905                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5906                 AC_TRY_LINK([\
5907 #include <sys/sendfile.h>],
5908 [\
5909         int sfvcnt;
5910         size_t xferred;
5911         struct sendfilevec vec[2];
5912         ssize_t nwritten;
5913         int tofd;
5914
5915         sfvcnt = 2;
5916
5917         vec[0].sfv_fd = SFV_FD_SELF;
5918         vec[0].sfv_flag = 0;
5919         vec[0].sfv_off = 0;
5920         vec[0].sfv_len = 0;
5921
5922         vec[1].sfv_fd = 0;
5923         vec[1].sfv_flag = 0;
5924         vec[1].sfv_off = 0;
5925         vec[1].sfv_len = 0;
5926         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5927 ],
5928 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5929
5930         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5931                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5932                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5933                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5934         else
5935                 AC_MSG_RESULT(no);
5936         fi
5937         ;;
5938         *aix*)
5939                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5940                 AC_TRY_LINK([\
5941 #include <sys/socket.h>],
5942 [\
5943         int fromfd, tofd;
5944         size_t total=0;
5945         struct sf_parms hdtrl;
5946         ssize_t nwritten;
5947         off64_t offset;
5948
5949         hdtrl.header_data = 0;
5950         hdtrl.header_length = 0;
5951         hdtrl.file_descriptor = fromfd;
5952         hdtrl.file_offset = 0;
5953         hdtrl.file_bytes = 0;
5954         hdtrl.trailer_data = 0;
5955         hdtrl.trailer_length = 0;
5956
5957         nwritten = send_file(&tofd, &hdtrl, 0);
5958 ],
5959 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5960         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5961                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5962                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5963                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5964         else
5965                 AC_MSG_RESULT(no);
5966         fi
5967         ;;
5968         *)
5969         ;;
5970         esac
5971         ;;
5972   *)
5973     AC_MSG_RESULT(no)
5974     ;;
5975   esac ],
5976   AC_MSG_RESULT(yes)
5977 )
5978
5979 ############################################
5980 # See if we have the Linux readahead syscall.
5981
5982 AC_CACHE_CHECK([for Linux readahead],
5983                 samba_cv_HAVE_LINUX_READAHEAD,[
5984     AC_TRY_LINK([
5985 #if defined(HAVE_UNISTD_H)
5986 #include <unistd.h>
5987 #endif
5988 #include <fcntl.h>],
5989     [ssize_t err = readahead(0,0,0x80000);],
5990     samba_cv_HAVE_LINUX_READAHEAD=yes,
5991     samba_cv_HAVE_LINUX_READAHEAD=no)])
5992
5993 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5994   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5995              [Whether Linux readahead is available])
5996 fi
5997
5998 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
5999
6000 ############################################
6001 # See if we have the posix_fadvise syscall.
6002
6003 AC_CACHE_CHECK([for posix_fadvise],
6004                 samba_cv_HAVE_POSIX_FADVISE,[
6005     AC_TRY_LINK([
6006 #if defined(HAVE_UNISTD_H)
6007 #include <unistd.h>
6008 #endif
6009 #include <fcntl.h>],
6010     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
6011     samba_cv_HAVE_POSIX_FADVISE=yes,
6012     samba_cv_HAVE_POSIX_FADVISE=no)])
6013
6014 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
6015   AC_DEFINE(HAVE_POSIX_FADVISE,1,
6016              [Whether posix_fadvise is available])
6017 fi
6018
6019
6020
6021 #################################################
6022 # Check whether winbind is supported on this platform.  If so we need to
6023 # build and install client programs, sbin programs and shared libraries
6024
6025 AC_MSG_CHECKING(whether to build winbind)
6026
6027 # Initially, the value of $host_os decides whether winbind is supported
6028
6029 HAVE_WINBIND=yes
6030
6031 # Define the winbind shared library name and any specific linker flags
6032 # it needs to be built with.
6033
6034 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
6035 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
6036 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
6037 NSSSONAMEVERSIONSUFFIX=""
6038 WINBIND_NSS_PTHREAD=""
6039
6040 case "$host_os" in
6041         *linux*)
6042                 NSSSONAMEVERSIONSUFFIX=".2"
6043                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
6044                 ;;
6045         *freebsd[[5-9]]*)
6046                 # FreeBSD winbind client is implemented as a wrapper around
6047                 # the Linux version.
6048                 NSSSONAMEVERSIONSUFFIX=".1"
6049                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
6050                     nsswitch/winbind_nss_linux.o"
6051                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
6052                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
6053                 ;;
6054
6055         *netbsd*[[3-9]]*)
6056                 # NetBSD winbind client is implemented as a wrapper
6057                 # around the Linux version. It needs getpwent_r() to
6058                 # indicate libc's use of the correct nsdispatch API.
6059                 #
6060                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
6061                         WINBIND_NSS_EXTRA_OBJS="\
6062                             nsswitch/winbind_nss_netbsd.o \
6063                             nsswitch/winbind_nss_linux.o"
6064                         WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
6065                         WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
6066                 else
6067                         HAVE_WINBIND=no
6068                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
6069                 fi
6070                 ;;
6071         *irix*)
6072                 # IRIX has differently named shared libraries
6073                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
6074                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
6075                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
6076                 ;;
6077         *solaris*)
6078                 # Solaris winbind client is implemented as a wrapper around
6079                 # the Linux version.
6080                 NSSSONAMEVERSIONSUFFIX=".1"
6081                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
6082                     nsswitch/winbind_nss_linux.o"
6083                 WINBIND_NSS_EXTRA_LIBS="-lsocket"
6084                 ;;
6085         *hpux11*)
6086                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
6087                 ;;
6088         *aix*)
6089                 # AIX has even differently named shared libraries.  No
6090                 # WINS support has been implemented yet.
6091                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
6092                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
6093                 WINBIND_NSS="nsswitch/WINBIND"
6094                 WINBIND_WINS_NSS=""
6095                 ;;
6096         *)
6097                 HAVE_WINBIND=no
6098                 winbind_no_reason=", unsupported on $host_os"
6099                 ;;
6100 esac
6101
6102 # Check the setting of --with-winbind
6103
6104 AC_ARG_WITH(winbind,
6105 [  --with-winbind          Build winbind (default, if supported by OS)],
6106 [
6107   case "$withval" in
6108         yes)
6109                 HAVE_WINBIND=yes
6110                 ;;
6111         no)
6112                 HAVE_WINBIND=no
6113                 winbind_reason=""
6114                 ;;
6115   esac ],
6116 )
6117
6118 # We need unix domain sockets for winbind
6119
6120 if test x"$HAVE_WINBIND" = x"yes"; then
6121         if test x"$samba_cv_unixsocket" = x"no"; then
6122                 winbind_no_reason=", no unix domain socket support on $host_os"
6123                 HAVE_WINBIND=no
6124         fi
6125 fi
6126
6127 # Display test results
6128
6129 if test x"$HAVE_WINBIND" = x"no"; then
6130         WINBIND_NSS=""
6131         WINBIND_WINS_NSS=""
6132 fi
6133
6134 if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes"; then
6135         NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6136 fi
6137
6138 if test x"$HAVE_WINBIND" = x"yes"; then
6139         AC_MSG_RESULT(yes)
6140         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6141
6142         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6143         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6144         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6145                 PAM_MODULES="$PAM_MODULES pam_winbind"
6146                 INSTALL_PAM_MODULES="installpammodules"
6147                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6148         fi
6149 else
6150         AC_MSG_RESULT(no$winbind_no_reason)
6151 fi
6152
6153 AC_CHECK_LIB(pthread, pthread_mutex_lock, [WINBIND_NSS_PTHREAD="-lpthread"
6154                         AC_DEFINE(HAVE_PTHREAD, 1, [whether pthread exists])])
6155
6156 AC_SUBST(WINBIND_NSS_PTHREAD)
6157 AC_SUBST(WINBIND_NSS)
6158 AC_SUBST(WINBIND_WINS_NSS)
6159 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
6160 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
6161 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
6162 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
6163
6164 AC_SUBST(WINBIND_KRB5_LOCATOR)
6165
6166 # Solaris 10 does have new member in nss_XbyY_key
6167 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6168                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6169                 [#include <nss_dbdefs.h>])
6170
6171 # Solaris has some extra fields in struct passwd that need to be
6172 # initialised otherwise nscd crashes.
6173
6174 AC_CHECK_MEMBER(struct passwd.pw_comment,
6175                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6176                 [#include <pwd.h>])
6177
6178 AC_CHECK_MEMBER(struct passwd.pw_age,
6179                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6180                 [#include <pwd.h>])
6181
6182 # AIX 4.3.x and 5.1 do not have as many members in
6183 # struct secmethod_table as AIX 5.2
6184 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6185        [#include <usersec.h>])
6186 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6187        [#include <usersec.h>])
6188
6189 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6190 AC_TRY_COMPILE([#include <sys/types.h>
6191 #include <sys/socket.h>],
6192 [struct ucred cred;
6193  socklen_t cred_len;
6194  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6195 ],
6196 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6197 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6198     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6199 fi
6200
6201
6202 #################################################
6203 # Check to see if we should use the included popt
6204
6205 AC_ARG_WITH(included-popt,
6206 [  --with-included-popt    use bundled popt library, not from system],
6207 [
6208   case "$withval" in
6209         yes)
6210                 INCLUDED_POPT=yes
6211                 ;;
6212         no)
6213                 INCLUDED_POPT=no
6214                 ;;
6215   esac ],
6216 )
6217 if test x"$INCLUDED_POPT" != x"yes"; then
6218     AC_CHECK_LIB(popt, poptGetContext,
6219                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6220 fi
6221
6222 AC_MSG_CHECKING(whether to use included popt)
6223 if test x"$INCLUDED_POPT" = x"yes"; then
6224     AC_MSG_RESULT(yes)
6225     BUILD_POPT='$(POPT_OBJ)'
6226     POPTLIBS='$(POPT_OBJ)'
6227     FLAGS1="-I\$(srcdir)/popt"
6228 else
6229     AC_MSG_RESULT(no)
6230         BUILD_POPT=""
6231     POPTLIBS="-lpopt"
6232 fi
6233 AC_SUBST(BUILD_POPT)
6234 AC_SUBST(POPTLIBS)
6235 AC_SUBST(FLAGS1)
6236
6237 #################################################
6238 # Check if user wants DNS service discovery support
6239
6240 AC_ARG_ENABLE(dnssd,
6241 [  --enable-dnssd          Enable DNS service discovery support (default=auto)])
6242
6243 AC_SUBST(DNSSD_LIBS)
6244 if test x"$enable_dnssd" != x"no"; then
6245     have_dnssd_support=yes
6246
6247     AC_CHECK_HEADERS(dns_sd.h)
6248     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6249         have_dnssd_support=no
6250     fi
6251
6252     # On Darwin the DNSSD API is in libc, but on other platforms it's
6253     # probably in -ldns_sd
6254     AC_CHECK_FUNCS(DNSServiceRegister)
6255     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6256     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6257             x"$ac_cv_lib_ext_DNSServiceRegister" != x"yes"; then
6258         have_dnssd_support=no
6259     fi
6260
6261     if test x"$have_dnssd_support" = x"yes"; then
6262         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6263                 [Whether to enable DNS service discovery support])
6264     else
6265         if test x"$enable_dnssd" = x"yes"; then
6266             AC_MSG_ERROR(DNS service discovery support not available)
6267         fi
6268     fi
6269
6270 fi
6271
6272 #################################################
6273 # Check to see if we should use the included iniparser
6274
6275 AC_ARG_WITH(included-iniparser,
6276 [  --with-included-iniparser    use bundled iniparser library, not from system],
6277 [
6278   case "$withval" in
6279         yes)
6280                 INCLUDED_INIPARSER=yes
6281                 ;;
6282         no)
6283                 INCLUDED_INIPARSER=no
6284                 ;;
6285   esac ],
6286 )
6287 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6288     AC_CHECK_LIB(iniparser, iniparser_load,
6289                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6290 fi
6291
6292 AC_MSG_CHECKING(whether to use included iniparser)
6293 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6294     AC_MSG_RESULT(yes)
6295     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6296         INIPARSERLIBS=""
6297     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
6298 else
6299     AC_MSG_RESULT(no)
6300         BUILD_INIPARSER=""
6301     INIPARSERLIBS="-liniparser"
6302 fi
6303 AC_SUBST(BUILD_INIPARSER)
6304 AC_SUBST(INIPARSERLIBS)
6305 AC_SUBST(FLAGS1)
6306
6307
6308
6309 # Checks for the vfs_fileid module
6310 # Start
6311 AC_CHECK_FUNC(getmntent)
6312
6313 AC_CHECK_HEADERS(sys/statfs.h)
6314
6315 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
6316 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6317              AC_TRY_RUN([
6318                 #include <sys/types.h>
6319                 #include <sys/statfs.h>
6320                 int main(void)
6321                 {
6322                         struct statfs fsd;
6323                         fsid_t fsid = fsd.f_fsid;
6324                         return statfs (".", &fsd);
6325                 }],
6326                 vfsfileid_cv_statfs=yes,
6327                 vfsfileid_cv_statfs=no,
6328                 vfsfileid_cv_statfs=cross)
6329 ])
6330 AC_MSG_RESULT($vfsfileid_cv_statfs)
6331
6332 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6333         x"$vfsfileid_cv_statfs" = x"yes"; then
6334         default_shared_modules="$default_shared_modules vfs_fileid"
6335 fi
6336 # End
6337 # Checks for the vfs_fileid module
6338
6339
6340 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6341 do
6342         eval MODULE_DEFAULT_$i=STATIC
6343 done
6344
6345 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6346 do
6347         dnl Fall back to static if we cannot build shared libraries
6348         eval MODULE_DEFAULT_$i=STATIC
6349
6350         if test $BLDSHARED = true; then
6351                 eval MODULE_DEFAULT_$i=SHARED
6352         fi
6353 done
6354
6355 dnl Always built these modules static
6356 MODULE_rpc_spoolss=STATIC
6357 MODULE_rpc_srvsvc2=STATIC
6358 MODULE_idmap_tdb=STATIC
6359 MODULE_idmap_passdb=STATIC
6360 MODULE_idmap_nss=STATIC
6361
6362 MODULE_nss_info_template=STATIC
6363
6364 AC_ARG_WITH(static-modules,
6365 [  --with-static-modules=MODULES  Comma-separated list of names of modules to statically link in],
6366 [ if test $withval; then
6367         for i in `echo $withval | sed -e 's/,/ /g'`
6368         do
6369                 eval MODULE_$i=STATIC
6370         done
6371 fi ])
6372
6373 AC_ARG_WITH(shared-modules,
6374 [  --with-shared-modules=MODULES  Comma-separated list of names of modules to build shared],
6375 [ if test $withval; then
6376         for i in `echo $withval | sed -e 's/,/ /g'`
6377         do
6378                         eval MODULE_$i=SHARED
6379         done
6380 fi ])
6381
6382 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
6383                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6384 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6385 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6386 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6387
6388
6389 SMB_MODULE(rpc_lsa, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
6390 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
6391 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
6392 SMB_MODULE(rpc_lsa_ds, \$(RPC_LSA_DS_OBJ), "bin/librpc_lsa_ds.$SHLIBEXT", RPC)
6393 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6394 SMB_MODULE(rpc_svcctl2, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl2.$SHLIBEXT", RPC)
6395 SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC)
6396 SMB_MODULE(rpc_net, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6397 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6398 SMB_MODULE(rpc_srvsvc2, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc2.$SHLIBEXT", RPC)
6399 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6400 SMB_MODULE(rpc_eventlog2, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog2.$SHLIBEXT", RPC)
6401 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6402 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
6403 SMB_SUBSYSTEM(RPC,smbd/server.o)
6404
6405 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6406 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6407 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6408 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6409 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6410 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6411 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6412
6413 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6414 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6415
6416 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6417 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6418 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6419 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6420 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6421
6422 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6423 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6424 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6425 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6426 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6427 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6428 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6429 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6430
6431 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6432 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6433 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6434 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6435 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6436 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6437 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6438 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6439 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6440 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6441 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6442 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6443 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6444 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6445 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6446 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6447 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6448 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6449 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6450 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6451 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6452 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6453 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6454 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6455 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6456 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6457 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6458 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6459 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6460
6461 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6462
6463 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6464
6465 #################################################
6466 # do extra things if we are running insure
6467
6468 if test "${ac_cv_prog_CC}" = "insure"; then
6469         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6470 fi
6471
6472 #################################################
6473 # If run from the build farm, enable NASTY hacks
6474 #################################################
6475 AC_MSG_CHECKING(whether to enable build farm hacks)
6476 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6477         AC_MSG_RESULT(yes)
6478         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6479 else
6480         AC_MSG_RESULT(no)
6481 fi
6482
6483 #################################################
6484 # check for bad librt/libpthread interactions
6485
6486 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6487     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6488     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6489     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6490
6491 SMB_IF_RTSIGNAL_BUG(
6492         [
6493             # Have RT_SIGNAL bug, need to check whether the problem will
6494             # affect anything we have configured.
6495
6496             rt_do_error=no
6497             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6498                 if test x"$rt_signal_lease_ok" = x"no" ; then
6499                     rt_do_error=yes
6500                 fi
6501             fi
6502
6503             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6504                 if test x"$rt_signal_notify_ok" = x"no" ; then
6505                     rt_do_error=yes
6506                 fi
6507             fi
6508
6509             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6510                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6511                 if test x"$rt_signal_aio_ok" = x"no" ; then
6512                     rt_do_error=yes
6513                 fi
6514             fi
6515
6516             if test x"$rt_do_error" = x"yes" ; then
6517                 SMB_IS_LIBPTHREAD_LINKED(
6518                     [
6519                         cat<<MSG
6520
6521 *** On this platforms, linking Samba against pthreads causes problems
6522 *** with the oplock and change notification mechanisms. You may be
6523 *** using pthreads as a side-effect of using the --with-aio-support
6524 *** or --with-profiling-data options. Please remove these and try again.
6525
6526 MSG
6527                     ],
6528                     [
6529                         cat<<MSG
6530
6531 *** On this platform, the oplock and change notification mechanisms do not
6532 *** appear to work. Please report this problem to samba-technical@samba.org
6533 *** and attach the config.log file from this directory.
6534
6535 MSG
6536                     ])
6537                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6538             fi
6539         ],
6540         [
6541             # no RT_SIGNAL bug, we are golden
6542             SMB_IS_LIBPTHREAD_LINKED(
6543                 [
6544                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6545                 ])
6546
6547         ],
6548         [
6549             # cross compiling, I hope you know what you are doing
6550             true
6551         ])
6552
6553 fi
6554
6555 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6556 LIB_REMOVE_USR_LIB(LDFLAGS)
6557 LIB_REMOVE_USR_LIB(LIBS)
6558 LIB_REMOVE_USR_LIB(KRB5_LIBS)
6559
6560 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6561 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6562 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6563
6564 #################################################
6565 # Display summary of libraries detected
6566
6567 AC_MSG_RESULT([Using libraries:])
6568 AC_MSG_RESULT([    LIBS = $LIBS])
6569 if test x"$with_ads_support" != x"no"; then
6570     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6571 fi
6572 if test x"$with_ldap_support" != x"no"; then
6573     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6574 fi
6575 if test x"$with_dnsupdate_support" != x"no"; then
6576     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6577 fi
6578 if test x"$have_dnssd_support" != x"no"; then
6579     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6580 fi
6581 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6582
6583 #################################################
6584 # final configure stuff
6585
6586 AC_MSG_CHECKING([configure summary])
6587 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
6588            AC_MSG_RESULT(yes),
6589            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6590            AC_MSG_WARN([cannot run when cross-compiling]))
6591
6592 dnl Merge in developer cflags from now on
6593 AC_SUBST(DEVELOPER_CFLAGS)
6594 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes"; then
6595     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
6596 fi
6597
6598 builddir=`pwd`
6599 AC_SUBST(builddir)
6600
6601 # Stuff the smbd-only libraries at the end of the smbd link
6602 # path (if we have them).
6603 SMBD_LIBS="$samba_dmapi_libs"
6604 AC_SUBST(SMBD_LIBS)
6605
6606 AC_OUTPUT(Makefile library-versions script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh)
6607
6608 #################################################
6609 # Print very concise instructions on building/use
6610 if test "x$enable_dmalloc" = xyes
6611 then
6612         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6613         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
6614 fi