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