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