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