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