r22846: Chunk one to replace message_send_pid with messaging_send: Deep inside
[sfrench/samba-autobuild/.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_LINK([
2218 #include <sys/time.h>
2219 #include <unistd.h>], [struct timeval tv; return gettimeofday(&tv, NULL);],
2220            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,
2221            samba_cv_HAVE_GETTIMEOFDAY_TZ=no)])
2222 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2223     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday takes a tz argument])
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; SMB_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; SMB_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 AC_SUBST(SMB_FAM_LIBS)
2675
2676 #################################################
2677 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2678
2679 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2680
2681 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2682 AC_TRY_RUN([
2683 #include <sys/types.h>
2684 #include <fcntl.h>
2685 #include <signal.h>
2686 #include <sys/file.h>
2687 #ifndef LOCK_MAND
2688 #define LOCK_MAND       32
2689 #define LOCK_READ       64
2690 #endif
2691 int main() {
2692         return flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0;
2693 }
2694 ],
2695 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2696 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2697     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2698 fi
2699
2700
2701 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2702 AC_TRY_COMPILE([#include <sys/types.h>
2703 #include <fcntl.h>],
2704 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2705 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2706 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2707     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2708 fi
2709
2710 #################################################
2711 # Check for POSIX capability support
2712
2713 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2714     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2715     [], [])
2716
2717 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2718
2719     ac_save_LIBS=$LIBS
2720     AC_LIBTESTFUNC(cap, cap_get_proc)
2721
2722     AC_CACHE_CHECK([for POSIX capabilities],
2723             samba_cv_HAVE_POSIX_CAPABILITIES,
2724             [
2725                 AC_TRY_RUN([
2726 #include <sys/types.h>
2727 #include <sys/capability.h>
2728 int main() {
2729  cap_t cap;
2730  cap_value_t vals[1];
2731  if (!(cap = cap_get_proc()))
2732    return 1;
2733  vals[0] = CAP_CHOWN;
2734  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2735  cap_set_proc(cap);
2736  return 0;
2737 }],
2738                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2739                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2740                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2741             ])
2742
2743 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2744     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2745             [Whether POSIX capabilities are available])
2746 else
2747     LIBS=$ac_save_LIBS
2748 fi
2749
2750 fi
2751
2752 #
2753 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2754 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2755 #
2756
2757 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2758 AC_TRY_COMPILE([#include <sys/types.h>
2759 #if defined(HAVE_RPC_RPC_H)
2760 #include <rpc/rpc.h>
2761 #endif],
2762 [int16 testvar;],
2763 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2764 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2765     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2766 fi
2767
2768 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2769 AC_TRY_COMPILE([#include <sys/types.h>
2770 #if defined(HAVE_RPC_RPC_H)
2771 #include <rpc/rpc.h>
2772 #endif],
2773 [uint16 testvar;],
2774 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2775 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2776     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2777 fi
2778
2779 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2780 AC_TRY_COMPILE([#include <sys/types.h>
2781 #if defined(HAVE_RPC_RPC_H)
2782 #include <rpc/rpc.h>
2783 #endif],
2784 [int32 testvar;],
2785 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2786 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2787     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2788 fi
2789
2790 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2791 AC_TRY_COMPILE([#include <sys/types.h>
2792 #if defined(HAVE_RPC_RPC_H)
2793 #include <rpc/rpc.h>
2794 #endif],
2795 [uint32 testvar;],
2796 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2797 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2798     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2799 fi
2800
2801 dnl
2802 dnl Some systems (SCO) have a problem including
2803 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2804 dnl as a #define in <prot.h> and as part of an enum
2805 dnl in <rpc/rpc.h>.
2806 dnl
2807
2808 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2809 AC_TRY_COMPILE([#include <sys/types.h>
2810 #ifdef HAVE_SYS_SECURITY_H
2811 #include <sys/security.h>
2812 #include <prot.h>
2813 #endif  /* HAVE_SYS_SECURITY_H */
2814 #if defined(HAVE_RPC_RPC_H)
2815 #include <rpc/rpc.h>
2816 #endif],
2817 [int testvar;],
2818 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2819 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2820     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2821 fi
2822
2823 AC_MSG_CHECKING([for test routines])
2824 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2825            AC_MSG_RESULT(yes),
2826            AC_MSG_ERROR([cant find test code. Aborting config]),
2827            AC_MSG_WARN([cannot run when cross-compiling]))
2828
2829 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2830 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2831            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2832 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2833     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2834 fi
2835
2836 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
2837 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
2838            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
2839            samba_cv_HAVE_WORKING_AF_LOCAL=no,
2840            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
2841 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
2842 then
2843     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
2844 fi
2845
2846 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2847 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2848            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2849 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2850     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2851 fi
2852
2853 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
2854 AC_TRY_RUN([#include <stdlib.h>
2855 #include <sys/types.h>
2856 #include <sys/stat.h>
2857 #include <unistd.h>
2858 int main() {
2859   struct stat st;
2860   char tpl[20]="/tmp/test.XXXXXX";
2861   int fd = mkstemp(tpl);
2862   if (fd == -1) return 1;
2863   unlink(tpl);
2864   if (fstat(fd, &st) != 0) return 1;
2865   if ((st.st_mode & 0777) != 0600) return 1;
2866   return 0;
2867 }],
2868 samba_cv_HAVE_SECURE_MKSTEMP=yes,
2869 samba_cv_HAVE_SECURE_MKSTEMP=no,
2870 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
2871 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
2872     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
2873 fi
2874
2875 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
2876         AC_TRY_RUN([
2877 #include "${srcdir-.}/lib/replace/test/os2_delete.c"
2878 int main(void) {
2879     return test_readdir_os2_delete();
2880 }
2881 ],
2882                 [samba_cv_HAVE_BROKEN_READDIR=no],
2883                         [samba_cv_HAVE_BROKEN_READDIR=yes],
2884                         [samba_cv_HAVE_BROKEN_READDIR="assuming not"])])
2885
2886 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
2887 AC_CACHE_CHECK([for replacing readdir],samba_cv_REPLACE_READDIR,[
2888         AC_TRY_RUN([
2889 #include "${srcdir-.}/lib/repdir.c"
2890 #include "${srcdir-.}/lib/replace/test/os2_delete.c"
2891 int main(void) {
2892     return test_readdir_os2_delete();
2893 ],
2894         samba_cv_REPLACE_READDIR=yes,samba_cv_REPLACE_READDIR=no)])
2895 fi
2896
2897 if test x"$samba_cv_REPLACE_READDIR" = x"yes"; then
2898         AC_DEFINE(REPLACE_READDIR,1,[replace readdir])
2899 fi
2900
2901 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2902 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2903 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2904 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2905 AC_CHECK_FUNCS(getpagesize)
2906
2907 ##################
2908 # look for a method of finding the list of network interfaces
2909 iface=no;
2910 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
2911 SAVE_CPPFLAGS="$CPPFLAGS"
2912 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2913 AC_TRY_RUN([
2914 #define HAVE_IFACE_AIX 1
2915 #define AUTOCONF_TEST 1
2916 #undef _XOPEN_SOURCE_EXTENDED
2917 #include "${srcdir-.}/lib/interfaces.c"],
2918            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
2919 CPPFLAGS="$SAVE_CPPFLAGS"
2920 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
2921     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
2922 fi
2923
2924 if test $iface = no; then
2925 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
2926 SAVE_CPPFLAGS="$CPPFLAGS"
2927 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2928 AC_TRY_RUN([
2929 #define HAVE_IFACE_IFCONF 1
2930 #define AUTOCONF_TEST 1
2931 #include "${srcdir-.}/lib/interfaces.c"],
2932            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
2933 CPPFLAGS="$SAVE_CPPFLAGS"
2934 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
2935     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
2936 fi
2937 fi
2938
2939 if test $iface = no; then
2940 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
2941 SAVE_CPPFLAGS="$CPPFLAGS"
2942 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2943 AC_TRY_RUN([
2944 #define HAVE_IFACE_IFREQ 1
2945 #define AUTOCONF_TEST 1
2946 #include "${srcdir-.}/lib/interfaces.c"],
2947            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
2948 CPPFLAGS="$SAVE_CPPFLAGS"
2949 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
2950     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
2951 fi
2952 fi
2953
2954
2955 ################################################
2956 # look for a method of setting the effective uid
2957 seteuid=no;
2958 if test $seteuid = no; then
2959 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2960 AC_TRY_RUN([
2961 #define AUTOCONF_TEST 1
2962 #define USE_SETRESUID 1
2963 #include "confdefs.h"
2964 #include "${srcdir-.}/lib/util_sec.c"],
2965            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2966 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2967     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2968 fi
2969 fi
2970
2971
2972 if test $seteuid = no; then
2973 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2974 AC_TRY_RUN([
2975 #define AUTOCONF_TEST 1
2976 #define USE_SETREUID 1
2977 #include "confdefs.h"
2978 #include "${srcdir-.}/lib/util_sec.c"],
2979            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2980 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2981     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2982 fi
2983 fi
2984
2985 if test $seteuid = no; then
2986 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2987 AC_TRY_RUN([
2988 #define AUTOCONF_TEST 1
2989 #define USE_SETEUID 1
2990 #include "confdefs.h"
2991 #include "${srcdir-.}/lib/util_sec.c"],
2992            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2993 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2994     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2995 fi
2996 fi
2997
2998 if test $seteuid = no; then
2999 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
3000 AC_TRY_RUN([
3001 #define AUTOCONF_TEST 1
3002 #define USE_SETUIDX 1
3003 #include "confdefs.h"
3004 #include "${srcdir-.}/lib/util_sec.c"],
3005            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
3006 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
3007     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
3008 fi
3009 fi
3010
3011
3012 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
3013 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
3014            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
3015 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
3016     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
3017 fi
3018
3019 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
3020 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
3021            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
3022 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
3023     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
3024 fi
3025
3026 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
3027 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
3028            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
3029 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
3030     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
3031
3032 else
3033
3034 dnl
3035 dnl Don't check for 64 bit fcntl locking if we know that the
3036 dnl glibc2.1 broken check has succeeded.
3037 dnl
3038
3039   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
3040   AC_TRY_RUN([
3041 #if defined(HAVE_UNISTD_H)
3042 #include <unistd.h>
3043 #endif
3044 #include <stdio.h>
3045 #include <stdlib.h>
3046
3047 #ifdef HAVE_FCNTL_H
3048 #include <fcntl.h>
3049 #endif
3050
3051 #ifdef HAVE_SYS_FCNTL_H
3052 #include <sys/fcntl.h>
3053 #endif
3054 int main() { struct flock64 fl64;
3055 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
3056 return 0;
3057 #else
3058 return 1;
3059 #endif
3060 }],
3061        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
3062
3063   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
3064       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
3065   fi
3066 fi
3067
3068 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
3069 AC_TRY_COMPILE([#include <sys/types.h>
3070 #include <sys/stat.h>
3071 #include <unistd.h>],
3072 [struct stat st;  st.st_blocks = 0;],
3073 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
3074 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
3075     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
3076 fi
3077
3078 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
3079 AC_TRY_COMPILE([#include <sys/types.h>
3080 #include <sys/stat.h>
3081 #include <unistd.h>],
3082 [struct stat st;  st.st_blksize = 0;],
3083 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
3084 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
3085     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
3086 fi
3087
3088 AC_CACHE_CHECK([for st_flags in struct stat],
3089         samba_cv_HAVE_STAT_ST_FLAGS,
3090         [
3091             AC_TRY_COMPILE([#include <sys/types.h>
3092 #include <sys/stat.h>
3093 #include <unistd.h>],
3094             [struct stat st;  st.st_flags = 0;],
3095             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3096             samba_cv_HAVE_STAT_ST_FLAGS=no,
3097             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3098         ])
3099
3100 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3101     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3102                 [Whether the stat struct has a st_flags member])
3103 fi
3104
3105 case "$host_os" in
3106 *linux*)
3107 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
3108 AC_TRY_COMPILE([
3109 #ifdef HAVE_SYS_VFS_H
3110 #include <sys/vfs.h>
3111 #endif
3112 #ifdef HAVE_SYS_CAPABILITY_H
3113 #include <sys/capability.h>
3114 #endif
3115 ],[int i;],
3116    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
3117 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
3118    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
3119 fi
3120 ;;
3121 esac
3122
3123 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3124 AC_TRY_COMPILE([
3125 #include <sys/types.h>
3126 #include <sys/acl.h>
3127 #if defined(HAVE_RPCSVC_NIS_H)
3128 #include <rpcsvc/nis.h>
3129 #endif],
3130 [int i;],
3131 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3132 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3133         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3134 fi
3135
3136 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3137 AC_TRY_RUN([
3138 #include <stdio.h>
3139 #include <stdlib.h>
3140 #include <limits.h>
3141 int main() {
3142         char *newpath = realpath("/tmp", NULL);
3143         return (newpath != NULL) ? 0 : 1;
3144 }
3145 ],
3146 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3147 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3148     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3149 fi
3150
3151 #################################################
3152 # check for AFS clear-text auth support
3153 samba_cv_WITH_AFS=no
3154 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3155 AC_ARG_WITH(afs,
3156 [  --with-afs              Include AFS clear-text auth support (default=no) ],
3157 [ case "$withval" in
3158   yes|auto)
3159     AC_MSG_RESULT($withval)
3160     samba_cv_WITH_AFS=$withval
3161     ;;
3162   *)
3163     AC_MSG_RESULT(no)
3164     ;;
3165   esac ],
3166   AC_MSG_RESULT(no)
3167 )
3168
3169 ####################################################
3170 # check for Linux-specific AFS fake-kaserver support
3171 samba_cv_WITH_FAKE_KASERVER=no
3172 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3173 AC_ARG_WITH(fake-kaserver,
3174 [  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
3175 [ case "$withval" in
3176   yes|auto)
3177     AC_MSG_RESULT($withval)
3178     samba_cv_WITH_FAKE_KASERVER=$withval
3179     ;;
3180   *)
3181     AC_MSG_RESULT(no)
3182     ;;
3183   esac ],
3184   AC_MSG_RESULT(no)
3185 )
3186
3187 #################################################
3188 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3189 if test x"$samba_cv_WITH_AFS" != x"no" ||
3190    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3191
3192     # see if this box has the afs-headers in /usr/include/afs
3193     AC_MSG_CHECKING(for /usr/include/afs)
3194     if test -d /usr/include/afs; then
3195           CFLAGS="$CFLAGS -I/usr/include/afs"
3196           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
3197           AC_MSG_RESULT(yes)
3198     else
3199       AC_MSG_RESULT(no)
3200     fi
3201
3202     # check for afs.h
3203     have_afs_headers=no
3204     AC_CHECK_HEADERS(afs.h afs/afs.h)
3205     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3206         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3207            test x"$samba_cv_WITH_AFS" = x"auto"; then
3208                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3209         else
3210                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3211         fi
3212     else
3213         have_afs_headers=yes
3214     fi
3215 fi
3216
3217 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3218     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3219 fi
3220
3221 #################################################
3222 # check whether to compile AFS/NT ACL mapping module
3223 samba_cv_WITH_VFS_AFSACL=no
3224 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3225 AC_ARG_WITH(vfs-afsacl,
3226 [  --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no) ],
3227 [ case "$withval" in
3228   yes|auto)
3229     AC_MSG_RESULT($withval)
3230     samba_cv_WITH_VFS_AFSACL=yes
3231     ;;
3232   *)
3233     AC_MSG_RESULT(no)
3234     ;;
3235   esac ],
3236   AC_MSG_RESULT(no)
3237 )
3238
3239 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3240    default_shared_modules="$default_shared_modules vfs_afsacl"
3241 fi
3242         
3243 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3244     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3245 fi
3246
3247 #################################################
3248 # check for the DFS clear-text auth system
3249 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3250 AC_ARG_WITH(dfs,
3251 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
3252 [ case "$withval" in
3253   yes)
3254     AC_MSG_RESULT(yes)
3255     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3256     ;;
3257   *)
3258     AC_MSG_RESULT(no)
3259     ;;
3260   esac ],
3261   AC_MSG_RESULT(no)
3262 )
3263
3264 ########################################################
3265 # Compile with LDAP support?
3266
3267 with_ldap_support=auto
3268 AC_MSG_CHECKING([for LDAP support])
3269
3270 AC_ARG_WITH(ldap,
3271 [  --with-ldap             LDAP support (default yes)],
3272 [ case "$withval" in
3273     yes|no)
3274         with_ldap_support=$withval
3275         ;;
3276   esac ])
3277
3278 AC_MSG_RESULT($with_ldap_support)
3279
3280 SMBLDAP=""
3281 AC_SUBST(SMBLDAP)
3282 SMBLDAPUTIL=""
3283 AC_SUBST(SMBLDAPUTIL)
3284 LDBLDAP=""
3285 AC_SUBST(LDBLDAP)
3286
3287 if test x"$with_ldap_support" != x"no"; then
3288
3289   ##################################################################
3290   # first test for ldap.h and lber.h
3291   # (ldap.h is required for this test)
3292   AC_CHECK_HEADERS(ldap.h lber.h)
3293
3294   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3295         if test x"$with_ldap_support" = x"yes"; then
3296          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3297         else
3298          AC_MSG_WARN(ldap.h is needed for LDAP support)
3299         fi
3300         
3301         with_ldap_support=no
3302   fi
3303
3304   ##################################################################
3305   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3306   # unsigned int in include/includes.h
3307   case $host_os in
3308         *hpux*)
3309          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3310          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3311         with_ldap_support=yes
3312         ;;
3313         *)
3314         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3315         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3316                 if test x"$with_ldap_support" = x"yes"; then
3317                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3318                 else
3319                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3320                 fi
3321                 with_ldap_support=no
3322         fi
3323         ;;
3324   esac
3325 fi
3326
3327 if test x"$with_ldap_support" != x"no"; then
3328   ac_save_LIBS=$LIBS
3329
3330   ##################################################################
3331   # we might need the lber lib on some systems. To avoid link errors
3332   # this test must be before the libldap test
3333   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3334
3335   ########################################################
3336   # now see if we can find the ldap libs in standard paths
3337   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3338
3339   ########################################################
3340   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3341   # Check found in pam_ldap 145.
3342   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3343
3344   LIBS="$LIBS $LDAP_LIBS"
3345   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3346     AC_TRY_COMPILE([
3347         #include <lber.h>
3348         #include <ldap.h>],
3349         [ldap_set_rebind_proc(0, 0, 0);],
3350         [smb_ldap_cv_ldap_set_rebind_proc=3],
3351         [smb_ldap_cv_ldap_set_rebind_proc=2]
3352     )
3353   ])
3354
3355   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3356
3357   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3358
3359   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3360     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3361     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3362     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3363     default_shared_modules="$default_shared_modules";
3364     SMBLDAP="lib/smbldap.o"
3365     SMBLDAPUTIL="lib/smbldap_util.o"
3366     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3367       AC_MSG_WARN(Disabling ldb_ldap support (requires ldap_initialize))
3368     else
3369       AC_DEFINE(HAVE_LDB_LDAP,1,[Whether ldb_ldap is available])
3370       LDBLDAP="lib/ldb/ldb_ldap/ldb_ldap.o"
3371     fi
3372     with_ldap_support=yes
3373     AC_MSG_CHECKING(whether LDAP support is used)
3374     AC_MSG_RESULT(yes)
3375   else
3376     if test x"$with_ldap_support" = x"yes"; then
3377         AC_MSG_ERROR(libldap is needed for LDAP support)
3378     else
3379         AC_MSG_WARN(libldap is needed for LDAP support)
3380     fi
3381
3382     LDAP_LIBS=""
3383     with_ldap_support=no
3384   fi
3385   LIBS=$ac_save_LIBS
3386 fi
3387
3388
3389 #################################################
3390 # active directory support
3391
3392 with_ads_support=auto
3393 AC_MSG_CHECKING([for Active Directory and krb5 support])
3394
3395 AC_ARG_WITH(ads,
3396 [  --with-ads              Active Directory support (default auto)],
3397 [ case "$withval" in
3398     yes|no)
3399         with_ads_support="$withval"
3400         ;;
3401   esac ])
3402
3403 AC_MSG_RESULT($with_ads_support)
3404
3405 FOUND_KRB5=no
3406 KRB5_LIBS=""
3407
3408 if test x"$with_ldap_support" != x"yes"; then
3409
3410     if test x"$with_ads_support" = x"yes"; then
3411         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3412     elif test x"$with_ads_support" = x"auto"; then
3413         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3414         with_ads_support=no
3415     fi
3416
3417 else
3418
3419     # Check to see whether there is enough LDAP functionality to be able
3420     # to build AD support.
3421
3422 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3423 case "$host_os" in
3424         *hpux*)
3425     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3426
3427     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3428         if test x"$with_ads_support" = x"yes"; then
3429             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3430         elif test x"$with_ads_support" = x"auto"; then
3431             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3432             with_ads_support=no
3433         fi
3434     fi
3435     ;;
3436         *)
3437     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3438
3439     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3440         if test x"$with_ads_support" = x"yes"; then
3441             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3442         elif test x"$with_ads_support" = x"auto"; then
3443             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3444             with_ads_support=no
3445         fi
3446     fi
3447     ;;
3448 esac
3449
3450
3451     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3452
3453     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3454         if test x"$with_ads_support" = x"yes"; then
3455             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3456         elif test x"$with_ads_support" = x"auto"; then
3457             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3458             with_ads_support=no
3459         fi
3460     fi
3461
3462 fi
3463
3464 if test x"$with_ads_support" != x"no"; then
3465
3466   # Do no harm to the values of CFLAGS and LIBS while testing for
3467   # Kerberos support.
3468
3469   if test x$FOUND_KRB5 = x"no"; then
3470     #################################################
3471     # check for location of Kerberos 5 install
3472     AC_MSG_CHECKING(for kerberos 5 install path)
3473     AC_ARG_WITH(krb5,
3474     [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
3475     [ case "$withval" in
3476       no)
3477         AC_MSG_RESULT(no krb5-path given)
3478         ;;
3479       yes)
3480         AC_MSG_RESULT(/usr)
3481         FOUND_KRB5=yes
3482         ;;
3483       *)
3484         AC_MSG_RESULT($withval)
3485         KRB5_CFLAGS="-I$withval/include"
3486         KRB5_CPPFLAGS="-I$withval/include"
3487         KRB5_LDFLAGS="-L$withval/lib"
3488         FOUND_KRB5=yes
3489         if test -x "$withval/bin/krb5-config"; then
3490                 KRB5CONFIG=$withval/bin/krb5-config
3491         fi
3492         ;;
3493       esac ],
3494       AC_MSG_RESULT(no krb5-path given)
3495     )
3496   fi
3497
3498   #################################################
3499   # check for krb5-config from recent MIT and Heimdal kerberos 5
3500   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3501   AC_MSG_CHECKING(for working krb5-config)
3502   if test -x "$KRB5CONFIG"; then
3503     ac_save_CFLAGS=$CFLAGS
3504     CFLAGS="";export CFLAGS
3505     ac_save_LDFLAGS=$LDFLAGS
3506     LDFLAGS="";export LDFLAGS
3507     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3508     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3509     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3510     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3511     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3512     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3513     FOUND_KRB5=yes
3514     AC_MSG_RESULT(yes)
3515   else
3516     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3517   fi
3518
3519   if test x$FOUND_KRB5 = x"no"; then
3520     #################################################
3521     # see if this box has the SuSE location for the heimdal krb implementation
3522     AC_MSG_CHECKING(for /usr/include/heimdal)
3523     if test -d /usr/include/heimdal; then
3524       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3525           KRB5_CFLAGS="-I/usr/include/heimdal"
3526           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3527           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3528           AC_MSG_RESULT(yes)
3529       else
3530           KRB5_CFLAGS="-I/usr/include/heimdal"
3531           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3532           AC_MSG_RESULT(yes)
3533       fi
3534     else
3535       AC_MSG_RESULT(no)
3536     fi
3537   fi
3538
3539   if test x$FOUND_KRB5 = x"no"; then
3540     #################################################
3541     # see if this box has the RedHat location for kerberos
3542     AC_MSG_CHECKING(for /usr/kerberos)
3543     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3544       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3545       KRB5_CFLAGS="-I/usr/kerberos/include"
3546       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3547       AC_MSG_RESULT(yes)
3548     else
3549       AC_MSG_RESULT(no)
3550     fi
3551   fi
3552
3553   ac_save_CFLAGS=$CFLAGS
3554   ac_save_CPPFLAGS=$CPPFLAGS
3555   ac_save_LDFLAGS=$LDFLAGS
3556
3557   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3558   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3559   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3560
3561   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3562
3563   # now check for krb5.h. Some systems have the libraries without the headers!
3564   # note that this check is done here to allow for different kerberos
3565   # include paths
3566   AC_CHECK_HEADERS(krb5.h)
3567
3568   if test x"$ac_cv_header_krb5_h" = x"no"; then
3569
3570     # Give a warning if AD support was not explicitly requested,
3571     # i.e with_ads_support = auto, otherwise die with an error.
3572
3573     if test x"$with_ads_support" = x"yes"; then
3574       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3575     else
3576       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3577     fi
3578
3579     # Turn off AD support and restore CFLAGS and LIBS variables
3580
3581     with_ads_support="no"
3582
3583     CFLAGS=$ac_save_CFLAGS
3584     CPPFLAGS=$ac_save_CPPFLAGS
3585     LDFLAGS=$ac_save_LDFLAGS
3586   fi
3587   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3588 fi
3589
3590 # Now we have determined whether we really want ADS support
3591 use_ads=no
3592 if test x"$with_ads_support" != x"no"; then
3593   use_ads=yes
3594   have_gssapi=no
3595   ac_save_LIBS=$LIBS
3596
3597   # now check for gssapi headers.  This is also done here to allow for
3598   # different kerberos include paths
3599   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3600
3601   ##################################################################
3602   # we might need the k5crypto and com_err libraries on some systems
3603   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3604   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3605
3606   # Heimdal checks.
3607   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3608   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3609   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3610
3611   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3612   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3613
3614   ########################################################
3615   # now see if we can find the krb5 libs in standard paths
3616   # or as specified above
3617   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3618   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3619
3620   ########################################################
3621   # now see if we can find the gssapi libs in standard paths
3622   if test x"$have_gssapi" != x"yes"; then
3623      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3624   fi
3625
3626   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3627   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3628   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3629   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3630   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3631   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3632   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3633   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3634   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3635   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3636   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3637   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3638   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3639   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3640   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3641   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3642   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3643   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3644   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3645   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3646   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3647   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3648   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3649   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3650   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3651   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3652   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3653   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3654   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3655   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3656   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3657   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3658   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3659   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3660   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3661   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3662   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3663   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3664   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3665   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3666   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3667
3668   LIBS="$KRB5_LIBS $LIBS"
3669
3670   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3671         smb_krb5_ticket_has_keyinfo,
3672         [
3673             AC_TRY_COMPILE(
3674             [
3675                 #include <krb5.h>
3676             ],
3677             [
3678                 krb5_ticket ticket;
3679                 krb5_kvno kvno;
3680                 krb5_enctype enctype;
3681
3682                 enctype = ticket.enc_part.enctype;
3683                 kvno = ticket.enc_part.kvno;
3684             ],
3685             [ smb_krb5_ticket_has_keyinfo=yes ],
3686             [ smb_krb5_ticket_has_keyinfo=no ])
3687         ])
3688
3689   if test x"$smb_krb5_ticket_has_keyinfo" = x"yes" ; then
3690         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3691             [Whether the krb5_ticket structure contains the kvno and enctype])
3692   fi
3693
3694   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3695           smb_krb5_creds_opt_free_context,
3696           [
3697                 AC_TRY_COMPILE([
3698                     #include <krb5.h>],
3699                     [
3700                         krb5_context ctx;
3701                         krb5_get_init_creds_opt *opt = NULL;
3702                         krb5_get_init_creds_opt_free(ctx, opt);
3703                     ],
3704                     [smb_krb5_creds_opt_free_context=yes],
3705                     [smb_krb5_creds_opt_free_context=no]
3706                 )
3707           ])
3708
3709   if test x"$smb_krb5_creds_opt_free_context" = x"yes" ; then
3710         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3711             [Whether krb5_get_init_creds_opt_free takes a context argument])
3712   fi
3713
3714   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_verify_checksum, [
3715     AC_TRY_COMPILE([
3716         #include <krb5.h>],
3717         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3718         [smb_krb5_verify_checksum=7],
3719         [smb_krb5_verify_checksum=6],
3720     )
3721   ])
3722   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_verify_checksum, [Number of arguments to krb5_verify_checksum])
3723
3724   AC_CACHE_CHECK([for checksum in krb5_checksum],
3725                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3726     AC_TRY_COMPILE([#include <krb5.h>],
3727       [krb5_checksum cksum; cksum.checksum.length = 0;],
3728       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3729       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3730
3731   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3732     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3733                [Whether the krb5_checksum struct has a checksum property])
3734   fi
3735
3736   AC_CACHE_CHECK([for etype in EncryptedData],
3737                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3738     AC_TRY_COMPILE([#include <krb5.h>],
3739       [EncryptedData edata; edata.etype = 0;],
3740       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3741       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3742
3743   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3744     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3745                [Whether the EncryptedData struct has a etype property])
3746   fi
3747
3748   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3749                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3750     AC_TRY_COMPILE([#include <krb5.h>],
3751       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3752       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3753       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3754
3755   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3756     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3757                [Whether the krb5_ap_req struct has a ticket pointer])
3758   fi
3759
3760   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3761                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3762     AC_TRY_COMPILE([#include <krb5.h>],
3763       [krb5_error err; err.e_data = NULL;],
3764       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3765       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3766
3767   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3768     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3769                [Whether the krb5_error struct has a e_data pointer])
3770   fi
3771
3772   AC_CACHE_CHECK([for krb5_crypto type],
3773                 samba_cv_HAVE_KRB5_CRYPTO,[
3774     AC_TRY_COMPILE([#include <krb5.h>],
3775       [krb5_crypto crypto;],
3776       samba_cv_HAVE_KRB5_CRYPTO=yes,
3777       samba_cv_HAVE_KRB5_CRYPTO=no)])
3778
3779   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3780     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3781                [Whether the type krb5_crypto exists])
3782   fi
3783
3784   AC_CACHE_CHECK([for krb5_encrypt_block type],
3785                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3786     AC_TRY_COMPILE([#include <krb5.h>],
3787       [krb5_encrypt_block block;],
3788       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3789       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3790
3791   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3792     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3793                [Whether the type krb5_encrypt_block exists])
3794   fi
3795
3796   AC_CACHE_CHECK([for addrtype in krb5_address],
3797                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3798     AC_TRY_COMPILE([#include <krb5.h>],
3799       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3800       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3801       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3802
3803   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3804     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3805                [Whether the krb5_address struct has a addrtype property])
3806   fi
3807
3808   AC_CACHE_CHECK([for addr_type in krb5_address],
3809                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3810     AC_TRY_COMPILE([#include <krb5.h>],
3811       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3812       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3813       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3814
3815   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3816     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3817               [Whether the krb5_address struct has a addr_type property])
3818   fi
3819
3820   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3821                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3822                  [AC_TRY_COMPILE([#include <krb5.h>],
3823     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3824     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3825
3826   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3827     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3828               [Whether the krb5_ticket struct has a enc_part2 property])
3829   fi
3830
3831   AC_CACHE_CHECK([for keyblock in krb5_creds],
3832                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3833     AC_TRY_COMPILE([#include <krb5.h>],
3834       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3835       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3836       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3837
3838   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3839     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3840               [Whether the krb5_creds struct has a keyblock property])
3841   fi
3842
3843   AC_CACHE_CHECK([for session in krb5_creds],
3844                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3845     AC_TRY_COMPILE([#include <krb5.h>],
3846       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3847       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3848       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3849
3850   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3851     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3852               [Whether the krb5_creds struct has a session property])
3853   fi
3854
3855   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3856                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3857     AC_TRY_COMPILE([#include <krb5.h>],
3858       [krb5_keyblock key; key.keyvalue.data = NULL;],
3859       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3860       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3861
3862   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3863     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3864               [Whether the krb5_keyblock struct has a keyvalue property])
3865   fi
3866
3867   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3868                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3869     AC_TRY_COMPILE([#include <krb5.h>],
3870       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3871       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3872       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3873   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3874                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3875     AC_TRY_COMPILE([#include <krb5.h>],
3876       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3877       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3878       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3879 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3880 # w.r.t. arcfour and windows, so we must not enable it here
3881   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3882           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3883     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3884               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3885   fi
3886
3887   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3888                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3889     AC_TRY_COMPILE([#include <krb5.h>],
3890       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3891       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3892       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3893
3894   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3895     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3896               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3897   fi
3898
3899   AC_CACHE_CHECK([for KV5M_KEYTAB],
3900                  samba_cv_HAVE_KV5M_KEYTAB,[
3901     AC_TRY_COMPILE([#include <krb5.h>],
3902       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3903       samba_cv_HAVE_KV5M_KEYTAB=yes,
3904       samba_cv_HAVE_KV5M_KEYTAB=no)])
3905
3906   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3907       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3908              [Whether the KV5M_KEYTAB option is available])
3909   fi
3910
3911   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3912                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3913     AC_TRY_COMPILE([#include <krb5.h>],
3914       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3915       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3916       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3917
3918   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3919     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3920               [Whether KRB5_KU_OTHER_CKSUM is available])
3921   fi
3922
3923   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3924                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3925     AC_TRY_COMPILE([#include <krb5.h>],
3926       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3927       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3928       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3929
3930   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3931     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3932               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3933   fi
3934
3935   AC_CACHE_CHECK([for the krb5_princ_component macro],
3936                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3937     AC_TRY_LINK([#include <krb5.h>],
3938       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3939       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3940       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3941
3942   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3943     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3944                [Whether krb5_princ_component is available])
3945   fi
3946
3947   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3948                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3949     AC_TRY_COMPILE([#include <krb5.h>],
3950       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3951       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3952       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3953
3954   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3955     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3956               [Whether krb5_keytab_entry has key member])
3957   fi
3958
3959   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3960                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3961     AC_TRY_COMPILE([#include <krb5.h>],
3962       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3963       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3964       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3965
3966   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3967     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3968               [Whether krb5_keytab_entry has keyblock member])
3969   fi
3970
3971   AC_CACHE_CHECK([for magic in krb5_address],
3972                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3973     AC_TRY_COMPILE([#include <krb5.h>],
3974       [krb5_address addr; addr.magic = 0;],
3975       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3976       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3977
3978   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3979     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3980               [Whether the krb5_address struct has a magic property])
3981   fi
3982
3983   AC_CACHE_CHECK([for WRFILE: keytab support],
3984                 samba_cv_HAVE_WRFILE_KEYTAB,[
3985     AC_TRY_RUN([
3986 #include<krb5.h>
3987   int main()
3988   {
3989     krb5_context context;
3990     krb5_keytab keytab;
3991
3992     krb5_init_context(&context);
3993     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3994   }],
3995   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3996   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3997
3998   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3999       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
4000                [Whether the WRFILE:-keytab is supported])
4001   fi
4002
4003   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
4004                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
4005     AC_TRY_COMPILE([#include <krb5.h>],
4006     [
4007     krb5_context context;
4008     krb5_principal principal;
4009     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
4010     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
4011     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
4012
4013   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
4014     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
4015               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
4016   fi
4017
4018   AC_CACHE_CHECK([for krb5_addresses type],
4019                 samba_cv_HAVE_KRB5_ADDRESSES,[
4020     AC_TRY_COMPILE([#include <krb5.h>],
4021       [krb5_addresses addr;],
4022       samba_cv_HAVE_KRB5_ADDRESSES=yes,
4023       samba_cv_HAVE_KRB5_ADDRESSES=no)])
4024
4025   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
4026     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
4027                [Whether the type krb5_addresses type exists])
4028   fi
4029
4030   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
4031                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
4032     AC_TRY_COMPILE([#include <krb5.h>],
4033     [
4034     krb5_mk_error(0,0,0);],
4035     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
4036     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
4037
4038   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
4039     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
4040               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
4041   fi
4042
4043   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
4044     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
4045         smb_krb5_enctype_to_string_takes_krb5_context_arg,[
4046         AC_TRY_RUN_STRICT([
4047                 #include <krb5.h>
4048                 int main(void) {
4049                         krb5_context context;
4050                         char *str = NULL;
4051                         krb5_enctype_to_string(context, 1, &str);
4052                         if (str) free (str); 
4053                         return 0;
4054                 }
4055                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4056                 smb_krb5_enctype_to_string_takes_krb5_context_arg=yes,
4057                 smb_krb5_enctype_to_string_takes_krb5_context_arg=no)])
4058
4059     if test x"$smb_krb5_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4060       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4061                 [whether krb5_enctype_to_string takes krb5_context argument])
4062     fi
4063
4064     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4065         smb_krb5_enctype_to_string_takes_size_t_arg,[
4066         AC_TRY_RUN_STRICT([
4067                 #include <krb5.h>
4068                 int main(void) {
4069                         char buf[256];
4070                         krb5_enctype_to_string(1, buf, 256);
4071                         return 0;
4072                 }
4073                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4074                 smb_krb5_enctype_to_string_takes_size_t_arg=yes,
4075                 smb_krb5_enctype_to_string_takes_size_t_arg=no)])
4076
4077     if test x"$smb_krb5_enctype_to_string_takes_size_t_arg" = x"yes"; then
4078       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4079                 [whether krb5_enctype_to_string takes size_t argument])
4080     fi
4081   fi
4082
4083   #
4084   #
4085   # Now the decisions whether we can support krb5
4086   #
4087   # NOTE: all tests should be done before this block!
4088   #
4089   #
4090   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4091     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4092     use_ads=no
4093   fi
4094
4095   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
4096           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
4097   then
4098     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4099     use_ads=no
4100   fi
4101
4102   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4103           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4104   then
4105     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4106     use_ads=no
4107   fi
4108
4109   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4110           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4111   then
4112     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4113     use_ads=no
4114   fi
4115
4116   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
4117           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
4118   then
4119     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
4120     use_ads=no
4121   fi
4122
4123   if test x"$smb_krb5_ticket_has_keyinfo" != x"yes" ; then
4124
4125       # We only need the following functions if we can't get the enctype
4126       # and kvno out of the ticket directly (ie. on Heimdal).
4127
4128       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
4129       then
4130         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
4131         use_ads=no
4132       fi
4133
4134       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
4135       then
4136         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
4137         use_ads=no
4138       fi
4139
4140   fi
4141
4142   if test x"$use_ads" = x"yes"; then
4143     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4144     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4145     if test x"$have_gssapi" = x"yes"; then
4146       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
4147     fi
4148   else
4149     if test x"$with_ads_support" = x"yes"; then
4150         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4151     else
4152         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4153     fi
4154     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4155     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4156     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4157     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4158     KRB5_LIBS=""
4159     with_ads_support=no
4160   fi
4161   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4162   AC_MSG_RESULT([$use_ads])
4163
4164 LIBS="$ac_save_LIBS"
4165 fi
4166
4167 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4168 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4169
4170
4171 ########################################################
4172 # Compile with DNS Updates support?
4173
4174 with_dnsupdate_support=no
4175 AC_MSG_CHECKING([whether to enable DNS Updates support])
4176
4177 AC_ARG_WITH(dnsupdate,
4178 [  --with-dnsupdate        Enable DNS Updates support (default no)],
4179 [ case "$withval" in
4180     yes|no)
4181         with_dnsupdate_support=$withval
4182         ;;
4183   esac ])
4184
4185 AC_MSG_RESULT($with_dnsupdate_support)
4186
4187 if test x"$with_dnsupdate_support" != x"no"; then
4188
4189   ################################################################
4190   # first test for Active Directory support being enabled
4191   #if test x"$with_ads_support" = x"no"; then
4192   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
4193   #             with_dnsupdate_support=no
4194   #fi           
4195   ##################################################################
4196   # then test for uuid.h (necessary to generate unique DNS keynames
4197   # (uuid.h is required for this test)
4198   AC_CHECK_HEADERS(uuid/uuid.h)
4199
4200   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4201         if test x"$with_dnsupdate_support" = x"yes"; then
4202          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4203         else
4204          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4205         fi
4206         with_dnsupdate_support=no
4207   fi
4208 fi
4209
4210 if test x"$with_dnsupdate_support" != x"no"; then
4211
4212   ########################################################
4213   # Now see if we can find the uuid libs in standard paths
4214   # On some systems, the uuid API is in libc, so we have to
4215   # be careful not to insert a spurious -luuid.
4216
4217   UUID_LIBS=""
4218   AC_LIBTESTFUNC(uuid, uuid_generate,
4219           [
4220             case " $LIBS " in
4221                 *\ -luuid\ *)
4222                 UUID_LIBS="-luuid"
4223                 SMB_REMOVE_LIB(uuid)
4224                 ;;
4225             esac
4226
4227             with_dnsupdate_support=yes
4228             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4229         ],
4230         [
4231             if test x"$with_dnsupdate_support" = x"yes"; then
4232                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4233             else
4234                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4235             fi
4236             with_dnsupdate_support=no
4237         ])
4238 fi
4239
4240 #################################################
4241 # check for automount support
4242 AC_MSG_CHECKING(whether to use automount)
4243 AC_ARG_WITH(automount,
4244 [  --with-automount        Include automount support (default=no)],
4245 [ case "$withval" in
4246   yes)
4247     AC_MSG_RESULT(yes)
4248     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4249     ;;
4250   *)
4251     AC_MSG_RESULT(no)
4252     ;;
4253   esac ],
4254   AC_MSG_RESULT(no)
4255 )
4256
4257 #################################################
4258 # check for smbmount support
4259 AC_MSG_CHECKING(whether to use smbmount)
4260 AC_ARG_WITH(smbmount,
4261 [  --with-smbmount         Include smbmount (Linux only) support (default=no)],
4262 [ case "$withval" in
4263   yes)
4264         case "$host_os" in
4265         *linux*)
4266                 AC_MSG_RESULT(yes)
4267                 AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
4268                 SMBMOUNT_PROGS="bin/smbmount bin/smbmnt bin/smbumount"
4269                 ;;
4270         *)
4271                 AC_MSG_ERROR(not on a linux system!)
4272                 ;;
4273         esac
4274     ;;
4275   *)
4276     AC_MSG_RESULT(no)
4277     ;;
4278   esac ],
4279   AC_MSG_RESULT(no)
4280 )
4281
4282 #################################################
4283 # check for mount- and umount.cifs support
4284 CIFSMOUNT_PROGS=""
4285 INSTALL_CIFSMOUNT=""
4286 UNINSTALL_CIFSMOUNT=""
4287 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4288 AC_ARG_WITH(cifsmount,
4289 [  --with-cifsmount        Include mount.cifs and umount.cifs (Linux only) support (default=yes)],
4290 [ case "$withval" in
4291   no)
4292         AC_MSG_RESULT(no)
4293         ;;
4294   *)
4295         case "$host_os" in
4296         *linux*)
4297                 AC_MSG_RESULT(yes)
4298                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4299                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4300                 INSTALL_CIFSMOUNT="installcifsmount"
4301                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4302                 ;;
4303         *)
4304                 AC_MSG_ERROR(not on a linux system!)
4305                 ;;
4306         esac
4307     ;;
4308   esac ],
4309 [ case "$host_os" in
4310   *linux*)
4311         AC_MSG_RESULT(yes)
4312         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4313         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4314         INSTALL_CIFSMOUNT="installcifsmount"
4315         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4316         ;;
4317   *)
4318         AC_MSG_RESULT(no)
4319         ;;
4320   esac ]
4321 )
4322
4323
4324 #################################################
4325 # check for a PAM clear-text auth, accounts, password and session support
4326 with_pam_for_crypt=no
4327 try_pam=no
4328 AC_MSG_CHECKING(whether to try PAM support)
4329 AC_ARG_WITH(pam,
4330 [  --with-pam              Include PAM support (default=no)],
4331 [ case "$withval" in
4332   yes|no)
4333     try_pam=$withval
4334     ;;
4335   esac
4336 ])
4337 AC_MSG_RESULT([$try_pam])
4338
4339 use_pam=no
4340 create_pam_modules=no
4341 if test x"${try_pam}" != x"no";then
4342         use_pam=yes
4343         create_pam_modules=yes
4344
4345         AC_CHECK_HEADERS(security/pam_appl.h)
4346         if test x"$ac_cv_header_security_pam_appl_h" != x"yes"; then
4347                 if test x"${try_pam}" = x"yes";then
4348                         AC_MSG_ERROR([--with-pam=yes but security/pam_appl.h not found])
4349                 fi
4350                 use_pam=no
4351                 create_pam_modules=no
4352         fi
4353
4354         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4355         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4356                 if test x"${try_pam}" = x"yes";then
4357                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4358                 fi
4359                 use_pam=no
4360                 create_pam_modules=no
4361         fi
4362
4363         AC_CHECK_HEADERS(security/pam_modules.h,,,[[
4364                 #if HAVE_SECURITY_PAM_APPL_H
4365                 #include <security/pam_appl.h>
4366                 #endif
4367         ]])
4368         if test x"$ac_cv_header_security_pam_modules_h" = x"no"; then
4369                 if test x"${try_pam}" = x"yes";then
4370                         AC_MSG_ERROR([--with-pam=yes but security/pam_modules.h not found])
4371                 fi
4372                 create_pam_modules=no
4373         fi
4374
4375         if test x"$use_pam" = x"yes"; then
4376                 AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4377                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4378                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4379                 with_pam_for_crypt=yes
4380
4381                 if test x"$create_pam_modules" = x"yes"; then
4382                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4383                         # this checks are optional,
4384                         # we don't care about the results here
4385                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4386                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4387                 else
4388                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4389                 fi
4390         fi
4391         AC_MSG_CHECKING(whether to use PAM support)
4392         AC_MSG_RESULT([$use_pam])
4393
4394         AC_MSG_CHECKING(whether to have PAM MODULES support)
4395         AC_MSG_RESULT([$create_pam_modules])
4396 fi # try_pam != no
4397
4398 #################################################
4399 # check for pam_smbpass support
4400 PAM_MODULES=""
4401 INSTALL_PAM_MODULES=""
4402 UNINSTALL_PAM_MODULES=""
4403 AC_MSG_CHECKING(whether to use pam_smbpass)
4404 AC_ARG_WITH(pam_smbpass,
4405 [  --with-pam_smbpass      Build PAM module for authenticating against passdb backends (default=no)],
4406 [ case "$withval" in
4407   yes)
4408     AC_MSG_RESULT(yes)
4409
4410        # Conditions under which pam_smbpass should not be built.
4411
4412        if test x"$BLDSHARED" != x"true"; then
4413           AC_MSG_ERROR([No support for shared modules])
4414        elif test x"$create_pam_modules" != x"yes"; then
4415           AC_MSG_ERROR([No support for PAM MODULES])
4416        else
4417           PAM_MODULES="pam_smbpass"
4418           INSTALL_PAM_MODULES="installpammodules"
4419           UNINSTALL_PAM_MODULES="uninstallpammodules"
4420        fi
4421     ;;
4422   *)
4423     AC_MSG_RESULT(no)
4424     ;;
4425   esac ],
4426   AC_MSG_RESULT(no)
4427 )
4428
4429
4430 ###############################################
4431 # test for where we get crypt() from
4432 AC_SEARCH_LIBS(crypt, [crypt],
4433   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
4434   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
4435
4436 ##
4437 ## moved after the check for -lcrypt in order to
4438 ## ensure that the necessary libraries are included
4439 ## check checking for truncated salt.  Wrapped by the
4440 ## $with_pam_for_crypt variable as above   --jerry
4441 ##
4442 if test $with_pam_for_crypt = no; then
4443 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4444 crypt_LIBS="$LIBS"
4445 LIBS="$AUTH_LIBS $LIBS"
4446 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
4447         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4448 LIBS="$crypt_LIBS"])
4449 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4450         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4451 fi
4452 fi
4453
4454 #################################################
4455 # check for a NISPLUS_HOME support
4456 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4457 AC_ARG_WITH(nisplus-home,
4458 [  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
4459 [ case "$withval" in
4460   yes)
4461     AC_MSG_RESULT(yes)
4462     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4463     ;;
4464   *)
4465     AC_MSG_RESULT(no)
4466     ;;
4467   esac ],
4468   AC_MSG_RESULT(no)
4469 )
4470
4471 #################################################
4472 # check for syslog logging
4473 AC_MSG_CHECKING(whether to use syslog logging)
4474 AC_ARG_WITH(syslog,
4475 [  --with-syslog           Include experimental SYSLOG support (default=no)],
4476 [ case "$withval" in
4477   yes)
4478     AC_MSG_RESULT(yes)
4479     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4480     ;;
4481   *)
4482     AC_MSG_RESULT(no)
4483     ;;
4484   esac ],
4485   AC_MSG_RESULT(no)
4486 )
4487
4488 #################################################
4489 # check for experimental disk-quotas support
4490
4491 samba_cv_WITH_QUOTAS=auto
4492 samba_cv_TRY_QUOTAS=no
4493 samba_cv_RUN_QUOTA_TESTS=auto
4494 samba_cv_WITH_SYS_QUOTAS=auto
4495 samba_cv_TRY_SYS_QUOTAS=auto
4496 samba_cv_SYSQUOTA_FOUND=no
4497
4498 AC_MSG_CHECKING(whether to try disk-quotas support)
4499 AC_ARG_WITH(quotas,
4500 [  --with-quotas           Include disk-quota support (default=no)],
4501 [ case "$withval" in
4502   yes)
4503     AC_MSG_RESULT(yes)
4504     samba_cv_WITH_QUOTAS=yes
4505     samba_cv_TRY_QUOTAS=yes
4506     samba_cv_RUN_QUOTA_TESTS=yes
4507     #set sys quotas to auto in this case
4508     samba_cv_TRY_SYS_QUOTAS=auto
4509     ;;
4510   auto)
4511     AC_MSG_RESULT(auto)
4512     samba_cv_WITH_QUOTAS=auto
4513     samba_cv_TRY_QUOTAS=auto
4514     samba_cv_RUN_QUOTA_TESTS=auto
4515     #set sys quotas to auto in this case
4516     samba_cv_TRY_SYS_QUOTAS=auto
4517     ;;
4518   no)
4519     AC_MSG_RESULT(no)
4520     samba_cv_WITH_QUOTAS=no
4521     samba_cv_TRY_QUOTAS=no
4522     samba_cv_RUN_QUOTA_TESTS=no
4523     ;;
4524   *)
4525     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4526     ;;
4527   esac ],
4528   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4529 )
4530
4531 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4532 AC_ARG_WITH(sys-quotas,
4533 [  --with-sys-quotas       Include lib/sysquotas.c support (default=auto)],
4534 [ case "$withval" in
4535   yes)
4536     AC_MSG_RESULT(yes)
4537     samba_cv_WITH_SYS_QUOTAS=yes
4538     samba_cv_TRY_SYS_QUOTAS=yes
4539     samba_cv_RUN_QUOTA_TESTS=yes
4540     ;;
4541   auto)
4542     AC_MSG_RESULT(auto)
4543     samba_cv_WITH_SYS_QUOTAS=auto
4544     samba_cv_TRY_SYS_QUOTAS=auto
4545     samba_cv_RUN_QUOTA_TESTS=auto
4546     ;;
4547   no)
4548     AC_MSG_RESULT(no)
4549     samba_cv_WITH_SYS_QUOTAS=no
4550     samba_cv_TRY_SYS_QUOTAS=no
4551     ;;
4552   *)
4553     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4554     ;;
4555   esac ],
4556   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4557 )
4558
4559 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4560 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4561   case "$host_os" in
4562         *linux*)
4563             AC_MSG_RESULT(yes)
4564             samba_cv_TRY_SYS_QUOTAS=yes
4565             samba_cv_RUN_QUOTA_TESTS=yes
4566             ;;
4567         *)
4568             AC_MSG_RESULT(no)
4569             samba_cv_TRY_SYS_QUOTAS=no
4570             ;;
4571   esac
4572 fi
4573
4574 #############################################
4575 # only check for quota stuff if --with-quotas
4576 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4577
4578 case "$host_os" in
4579         # on linux we didn't need to test we have builtin support
4580         *linux*)
4581             samba_cv_SYSQUOTA_FOUND=yes
4582             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4583             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4584             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4585             AC_MSG_RESULT(yes)
4586
4587             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4588             samba_cv_found_xfs_header=yes
4589             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4590             AC_MSG_RESULT(yes)
4591             ;;
4592         *solaris*)
4593             # need to set this define when using static linking (BUG 1473)
4594             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4595             ;;
4596         *)
4597             ;;
4598 esac
4599
4600 # some broken header files need this
4601 AC_CHECK_HEADER(asm/types.h,[
4602             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4603             AC_ADD_INCLUDE(<asm/types.h>)
4604             ])
4605
4606 # For quotas on Veritas VxFS filesystems
4607 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4608
4609 # For sys/quota.h and linux/quota.h
4610 AC_CHECK_HEADERS(sys/quota.h)
4611
4612 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4613 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4614 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4615 AC_TRY_COMPILE([
4616 #include "confdefs.h"
4617 #ifdef HAVE_SYS_TYPES_H
4618 #include <sys/types.h>
4619 #endif
4620 #ifdef HAVE_ASM_TYPES_H
4621 #include <asm/types.h>
4622 #endif
4623 #include <sys/quota.h>
4624 ],[int i = Q_XGETQUOTA;],
4625 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4626 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4627         samba_cv_found_xfs_header=yes
4628 fi
4629 fi
4630
4631 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4632 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4633 AC_TRY_COMPILE([
4634 #include "confdefs.h"
4635 #ifdef HAVE_SYS_QUOTA_H
4636 #include <sys/quota.h>
4637 #endif
4638 ],[
4639 struct dqblk D;
4640 D.dqb_fsoftlimit = 0;],
4641 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4642 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4643         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4644 fi
4645
4646 ##################
4647 # look for a working quota system
4648
4649 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4650 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4651 AC_TRY_RUN_STRICT([
4652 #define HAVE_QUOTACTL_4A 1
4653 #define AUTOCONF_TEST 1
4654 #include "confdefs.h"
4655 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4656            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4657 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4658     samba_cv_SYSQUOTA_FOUND=yes;
4659     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4660     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4661 fi
4662 fi
4663
4664 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4665 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4666 AC_TRY_RUN_STRICT([
4667 #define HAVE_QUOTACTL_4B 1
4668 #define AUTOCONF_TEST 1
4669 #include "confdefs.h"
4670 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4671            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4672 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4673     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4674     samba_cv_SYSQUOTA_FOUND=yes;
4675     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4676     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4677 fi
4678 fi
4679
4680 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4681 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4682 AC_TRY_RUN_STRICT([
4683 #define HAVE_QUOTACTL_3 1
4684 #define AUTOCONF_TEST 1
4685 #include "confdefs.h"
4686 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4687            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4688 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4689     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4690     samba_cv_SYSQUOTA_FOUND=yes;
4691     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4692     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4693 fi
4694 fi
4695
4696 #################################################
4697 # check for mntent.h and struct mntent
4698 AC_CHECK_HEADERS(mntent.h)
4699 #################################################
4700 # check for setmntent,getmntent,endmntent
4701 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4702
4703 #################################################
4704 # check for devnm.h and struct mntent
4705 AC_CHECK_HEADERS(devnm.h)
4706 #################################################
4707 # check for devnm
4708 AC_CHECK_FUNCS(devnm)
4709
4710 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4711     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4712         # if --with-sys-quotas=yes then build it
4713         # you have can use the get/set quota command smb.conf
4714         # options then
4715         samba_cv_SYSQUOTA_FOUND=auto
4716     fi
4717     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4718         # if --with-sys-quotas=yes then build it
4719         # you have can use the get/set quota command smb.conf
4720         # options then
4721         samba_cv_TRY_SYS_QUOTAS=auto
4722     fi
4723 fi
4724
4725 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4726 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4727 SAVE_CPPFLAGS="$CPPFLAGS"
4728 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4729 AC_TRY_COMPILE([
4730 #include "confdefs.h"
4731 #define NO_PROTO_H 1
4732 #define NO_CONFIG_H 1
4733 #define HAVE_SYS_QUOTAS 1
4734 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4735 #include "${srcdir-.}/lib/sysquotas.c"
4736 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4737 CPPFLAGS="$SAVE_CPPFLAGS"
4738 ])
4739 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4740 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4741     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4742         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4743         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4744         samba_cv_WE_USE_SYS_QUOTAS=yes
4745         AC_MSG_RESULT(yes)
4746     else
4747         AC_MSG_RESULT(no)
4748     fi
4749 fi
4750 fi
4751
4752 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4753 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4754 SAVE_CPPFLAGS="$CPPFLAGS"
4755 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4756 AC_TRY_COMPILE([
4757 #include "confdefs.h"
4758 #define NO_PROTO_H 1
4759 #define NO_CONFIG_H 1
4760 #define HAVE_SYS_QUOTAS 1
4761 #define HAVE_XFS_QUOTAS 1
4762 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4763 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4764 CPPFLAGS="$SAVE_CPPFLAGS"
4765 ])
4766 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4767     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4768         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4769     fi
4770 fi
4771 fi
4772
4773 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4774 SAVE_CPPFLAGS="$CPPFLAGS"
4775 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4776 AC_TRY_COMPILE([
4777 #include "confdefs.h"
4778 #define NO_PROTO_H 1
4779 #define NO_CONFIG_H 1
4780 #include "${srcdir-.}/smbd/quotas.c"
4781 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4782 CPPFLAGS="$SAVE_CPPFLAGS"
4783 ])
4784 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4785 AC_MSG_CHECKING(whether to use the old quota support)
4786     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4787       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4788         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4789         AC_MSG_RESULT(yes)
4790       else
4791         AC_MSG_RESULT(no)
4792       fi
4793     else
4794       AC_MSG_RESULT(no)
4795     fi
4796 fi
4797
4798 ####################
4799 # End of quota check samba_cv_RUN_QUOTA_TESTS
4800 fi
4801
4802 #################################################
4803 # check for experimental utmp accounting
4804
4805 AC_MSG_CHECKING(whether to support utmp accounting)
4806 WITH_UTMP=yes
4807 AC_ARG_WITH(utmp,
4808 [  --with-utmp             Include utmp accounting (default, if supported by OS)],
4809 [ case "$withval" in
4810   no)
4811                 WITH_UTMP=no
4812                 ;;
4813   *)
4814                 WITH_UTMP=yes
4815                 ;;
4816   esac ],
4817 )
4818
4819 # utmp requires utmp.h
4820 # Note similar check earlier, when checking utmp details.
4821
4822 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4823         utmp_no_reason=", no utmp.h on $host_os"
4824         WITH_UTMP=no
4825 fi
4826
4827 # Display test results
4828
4829 if test x"$WITH_UTMP" = x"yes"; then
4830         AC_MSG_RESULT(yes)
4831         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4832 else
4833         AC_MSG_RESULT(no$utmp_no_reason)
4834 fi
4835
4836 INSTALLLIBCMD_SH=:
4837 INSTALLLIBCMD_A=:
4838 UNINSTALLLIBCMD_SH=:
4839 UNINSTALLLIBCMD_A=:
4840
4841 if test $BLDSHARED = true; then
4842         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
4843         UNINSTALLLIBCMD_SH="rm -f"
4844 fi
4845 if test $enable_static = yes; then
4846         INSTALLLIBCMD_A="\$(INSTALLCMD)"
4847         UNINSTALLLIBCMD_A="rm -f"
4848 fi
4849
4850 #################################################
4851 # should we build libmsrpc?
4852 INSTALL_LIBMSRPC=
4853 UNINSTALL_LIBMSRPC=
4854 LIBMSRPC_SHARED=
4855 LIBMSRPC=
4856 AC_MSG_CHECKING(whether to build the libmsrpc shared library)
4857 AC_ARG_WITH(libmsrpc,
4858 [  --with-libmsrpc         Build the libmsrpc shared library (default=yes if shared libs supported)],
4859 [ case "$withval" in
4860   no)
4861      AC_MSG_RESULT(no)
4862      ;;
4863   *)
4864      if test $BLDSHARED = true; then
4865         LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
4866         LIBMSRPC=libmsrpc
4867         AC_MSG_RESULT(yes)
4868      else
4869         enable_static=yes
4870         AC_MSG_RESULT(no shared library support -- will supply static library)
4871      fi
4872      if test $enable_static = yes; then
4873         LIBMSRPC=libmsrpc
4874      fi
4875      INSTALL_LIBMSRPC=installlibmsrpc
4876      UNINSTALL_LIBMSRPC=uninstalllibmsrpc
4877      ;;
4878   esac ],
4879 [
4880 # if unspecified, default is to built it if possible.
4881   if test $BLDSHARED = true; then
4882      LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
4883      LIBMSRPC=libmsrpc
4884      AC_MSG_RESULT(yes)
4885    else
4886      enable_static=yes
4887      AC_MSG_RESULT(no shared library support -- will supply static library)
4888    fi
4889    if test $enable_static = yes; then
4890      LIBMSRPC=libmsrpc
4891   fi]
4892   INSTALL_LIBMSRPC=installlibmsrpc
4893   UNINSTALL_LIBMSRPC=uninstalllibmsrpc
4894 )
4895
4896
4897 #################################################
4898 # should we build libaddns?
4899 INSTALL_LIBADDNS=
4900 UNINSTALL_LIBADDNS=
4901 LIBADDNS_SHARED=
4902 LIBADDNS=
4903 AC_MSG_CHECKING(whether to build the libaddns shared library)
4904 AC_ARG_WITH(libaddns,
4905 [  --with-libaddns         Build the libaddns shared library (default=yes if shared libs supported)],
4906 [ case "$withval" in
4907   no)
4908      AC_MSG_RESULT(no)
4909      ;;
4910   *)
4911      if test $BLDSHARED = true; then
4912         LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
4913         LIBADDNS=libaddns
4914         AC_MSG_RESULT(yes)
4915      else
4916         enable_static=yes
4917         AC_MSG_RESULT(no shared library support -- will supply static library)
4918      fi
4919      if test $enable_static = yes; then
4920         LIBADDNS=libaddns
4921      fi
4922      INSTALL_LIBADDNS=installlibaddns
4923      UNINSTALL_LIBADDNS=uninstalllibaddns
4924      ;;
4925   esac ],
4926 [
4927 # if unspecified, default is to built it if possible.
4928   if test $BLDSHARED = true; then
4929      LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
4930      LIBADDNS=libaddns
4931      AC_MSG_RESULT(yes)
4932    else
4933      enable_static=yes
4934      AC_MSG_RESULT(no shared library support -- will supply static library)
4935    fi
4936    if test $enable_static = yes; then
4937      LIBADDNS=libaddns
4938   fi]
4939   INSTALL_LIBADDNS=installlibaddns
4940   UNINSTALL_LIBADDNS=uninstalllibaddns
4941 )
4942
4943 #################################################
4944 # should we build libsmbclient?
4945 INSTALL_LIBSMBCLIENT=
4946 UNINSTALL_LIBSMBCLIENT=
4947 LIBSMBCLIENT_SHARED=
4948 LIBSMBCLIENT=
4949 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
4950 AC_ARG_WITH(libsmbclient,
4951 [  --with-libsmbclient     Build the libsmbclient shared library (default=yes if shared libs supported)],
4952 [ case "$withval" in
4953   no)
4954      AC_MSG_RESULT(no)
4955      ;;
4956   *)
4957      if test $BLDSHARED = true; then
4958         LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
4959         LIBSMBCLIENT=libsmbclient
4960         AC_MSG_RESULT(yes)
4961      else
4962         enable_static=yes
4963         AC_MSG_RESULT(no shared library support -- will supply static library)
4964      fi
4965      if test $enable_static = yes; then
4966         LIBSMBCLIENT=libsmbclient
4967      fi
4968      INSTALL_LIBSMBCLIENT=installclientlib
4969      UNINSTALL_LIBSMBCLIENT=uninstallclientlib
4970      ;;
4971   esac ],
4972 [
4973 # if unspecified, default is to built it if possible.
4974   if test $BLDSHARED = true; then
4975      LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
4976      LIBSMBCLIENT=libsmbclient
4977      AC_MSG_RESULT(yes)
4978    else
4979      enable_static=yes
4980      AC_MSG_RESULT(no shared library support -- will supply static library)
4981    fi
4982    if test $enable_static = yes; then
4983      LIBSMBCLIENT=libsmbclient
4984   fi]
4985   INSTALL_LIBSMBCLIENT=installclientlib
4986   UNINSTALL_LIBSMBCLIENT=uninstallclientlib
4987 )
4988
4989 INSTALL_LIBSMBSHAREMODES=
4990 LIBSMBSHAREMODES_SHARED=
4991 LIBSMBSHAREMODES=
4992 AC_MSG_CHECKING(whether to build the libsmbsharemodes shared library)
4993 AC_ARG_WITH(libsmbsharemodes,
4994 [  --with-libsmbsharemodes     Build the libsmbsharemodes shared library (default=yes if shared libs supported)],
4995 [ case "$withval" in
4996   no)
4997      AC_MSG_RESULT(no)
4998      ;;
4999   *)
5000      if test $BLDSHARED = true; then
5001         LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
5002         LIBSMBSHAREMODES=libsmbsharemodes
5003         AC_MSG_RESULT(yes)
5004      else
5005         enable_static=yes
5006         AC_MSG_RESULT(no shared library support -- will supply static library)
5007      fi
5008      if test $enable_static = yes; then
5009         LIBSMBSHAREMODES=libsmbsharemodes
5010      fi
5011      INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
5012      UNINSTALL_LIBSMBSHAREMODES=uninstalllibsmbsharemodes
5013      ;;
5014   esac ],
5015 [
5016 # if unspecified, default is to built it if possible.
5017   if test $BLDSHARED = true; then
5018      LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
5019      LIBSMBSHAREMODES=libsmbsharemodes
5020      AC_MSG_RESULT(yes)
5021    else
5022      enable_static=yes
5023      AC_MSG_RESULT(no shared library support -- will supply static library)
5024    fi
5025    if test $enable_static = yes; then
5026      LIBSMBSHAREMODES=libsmbsharemodes
5027   fi]
5028   INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
5029 )
5030
5031 #################################################
5032 # these tests are taken from the GNU fileutils package
5033 AC_CHECKING(how to get filesystem space usage)
5034 space=no
5035
5036 # Test for statvfs64.
5037 if test $space = no; then
5038   # SVR4
5039   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
5040   [AC_TRY_RUN([
5041 #if defined(HAVE_UNISTD_H)
5042 #include <unistd.h>
5043 #endif
5044 #include <sys/types.h>
5045 #include <sys/statvfs.h>
5046   main ()
5047   {
5048     struct statvfs64 fsd;
5049     return statvfs64 (".", &fsd);
5050   }],
5051   fu_cv_sys_stat_statvfs64=yes,
5052   fu_cv_sys_stat_statvfs64=no,
5053   fu_cv_sys_stat_statvfs64=cross)])
5054   if test $fu_cv_sys_stat_statvfs64 = yes; then
5055     space=yes
5056     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
5057   fi
5058 fi
5059
5060 # Perform only the link test since it seems there are no variants of the
5061 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
5062 # because that got a false positive on SCO OSR5.  Adding the declaration
5063 # of a `struct statvfs' causes this test to fail (as it should) on such
5064 # systems.  That system is reported to work fine with STAT_STATFS4 which
5065 # is what it gets when this test fails.
5066 if test $space = no; then
5067   # SVR4
5068   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
5069                  [AC_TRY_LINK([#include <sys/types.h>
5070 #include <sys/statvfs.h>],
5071                               [struct statvfs fsd; statvfs (0, &fsd);],
5072                               fu_cv_sys_stat_statvfs=yes,
5073                               fu_cv_sys_stat_statvfs=no)])
5074   if test $fu_cv_sys_stat_statvfs = yes; then
5075     space=yes
5076     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
5077   fi
5078 fi
5079
5080 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
5081 # This is not the case on ancient Linux systems.
5082
5083 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
5084     AC_TRY_COMPILE([#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
5085         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
5086 if test x"$samba_cv_fsid_int" = x"yes"; then
5087     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
5088 fi
5089
5090 if test $space = no; then
5091   # DEC Alpha running OSF/1
5092   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
5093   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
5094   [AC_TRY_RUN([
5095 #include <sys/param.h>
5096 #include <sys/types.h>
5097 #include <sys/mount.h>
5098   main ()
5099   {
5100     struct statfs fsd;
5101     fsd.f_fsize = 0;
5102     return statfs (".", &fsd, sizeof (struct statfs));
5103   }],
5104   fu_cv_sys_stat_statfs3_osf1=yes,
5105   fu_cv_sys_stat_statfs3_osf1=no,
5106   fu_cv_sys_stat_statfs3_osf1=no)])
5107   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5108   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5109     space=yes
5110     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5111   fi
5112 fi
5113
5114 if test $space = no; then
5115 # AIX
5116   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5117 member (AIX, 4.3BSD)])
5118   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5119   [AC_TRY_RUN([
5120 #ifdef HAVE_SYS_PARAM_H
5121 #include <sys/param.h>
5122 #endif
5123 #ifdef HAVE_SYS_MOUNT_H
5124 #include <sys/mount.h>
5125 #endif
5126 #ifdef HAVE_SYS_VFS_H
5127 #include <sys/vfs.h>
5128 #endif
5129   main ()
5130   {
5131   struct statfs fsd;
5132   fsd.f_bsize = 0;
5133   return statfs (".", &fsd);
5134   }],
5135   fu_cv_sys_stat_statfs2_bsize=yes,
5136   fu_cv_sys_stat_statfs2_bsize=no,
5137   fu_cv_sys_stat_statfs2_bsize=no)])
5138   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5139   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5140     space=yes
5141     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5142   fi
5143 fi
5144
5145 if test $space = no; then
5146 # SVR3
5147   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5148   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5149   [AC_TRY_RUN([#include <sys/types.h>
5150 #include <sys/statfs.h>
5151   main ()
5152   {
5153   struct statfs fsd;
5154   return statfs (".", &fsd, sizeof fsd, 0);
5155   }],
5156     fu_cv_sys_stat_statfs4=yes,
5157     fu_cv_sys_stat_statfs4=no,
5158     fu_cv_sys_stat_statfs4=no)])
5159   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5160   if test $fu_cv_sys_stat_statfs4 = yes; then
5161     space=yes
5162     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5163   fi
5164 fi
5165
5166 if test $space = no; then
5167 # 4.4BSD and NetBSD
5168   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5169 member (4.4BSD and NetBSD)])
5170   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5171   [AC_TRY_RUN([#include <sys/types.h>
5172 #ifdef HAVE_SYS_PARAM_H
5173 #include <sys/param.h>
5174 #endif
5175 #ifdef HAVE_SYS_MOUNT_H
5176 #include <sys/mount.h>
5177 #endif
5178   main ()
5179   {
5180   struct statfs fsd;
5181   fsd.f_fsize = 0;
5182   return statfs (".", &fsd);
5183   }],
5184   fu_cv_sys_stat_statfs2_fsize=yes,
5185   fu_cv_sys_stat_statfs2_fsize=no,
5186   fu_cv_sys_stat_statfs2_fsize=no)])
5187   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5188   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5189     space=yes
5190         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5191   fi
5192 fi
5193
5194 if test $space = no; then
5195   # Ultrix
5196   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5197   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5198   [AC_TRY_RUN([#include <sys/types.h>
5199 #ifdef HAVE_SYS_PARAM_H
5200 #include <sys/param.h>
5201 #endif
5202 #ifdef HAVE_SYS_MOUNT_H
5203 #include <sys/mount.h>
5204 #endif
5205 #ifdef HAVE_SYS_FS_TYPES_H
5206 #include <sys/fs_types.h>
5207 #endif
5208   main ()
5209   {
5210   struct fs_data fsd;
5211   /* Ultrix's statfs returns 1 for success,
5212      0 for not mounted, -1 for failure.  */
5213   return statfs (".", &fsd) != 1;
5214   }],
5215   fu_cv_sys_stat_fs_data=yes,
5216   fu_cv_sys_stat_fs_data=no,
5217   fu_cv_sys_stat_fs_data=no)])
5218   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5219   if test $fu_cv_sys_stat_fs_data = yes; then
5220     space=yes
5221     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5222   fi
5223 fi
5224
5225 #
5226 # As a gating factor for large file support, in order to
5227 # use <4GB files we must have the following minimal support
5228 # available.
5229 # long long, and a 64 bit off_t or off64_t.
5230 # If we don't have all of these then disable large
5231 # file support.
5232 #
5233 AC_MSG_CHECKING([if large file support can be enabled])
5234 AC_TRY_COMPILE([
5235 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5236 #include <sys/types.h>
5237 #else
5238 __COMPILE_ERROR_
5239 #endif
5240 ],
5241 [int i],
5242 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5243 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5244         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5245 fi
5246 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5247
5248 #################################################
5249 # check for cluster extensions
5250
5251 AC_MSG_CHECKING(whether to include cluster support)
5252 AC_ARG_WITH(cluster-support,
5253 [  --with-cluster-support  Enable cluster extensions (default=no)])
5254 if test "x$with_cluster_support" = "xyes"; then
5255     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5256     AC_MSG_RESULT(yes)
5257 else
5258     AC_MSG_RESULT(no)
5259 fi
5260
5261
5262 #################################################
5263 # check for ACL support
5264
5265 AC_MSG_CHECKING(whether to support ACLs)
5266 AC_ARG_WITH(acl-support,
5267 [  --with-acl-support      Include ACL support (default=no)],
5268 [ case "$withval" in
5269   yes)
5270
5271         case "$host_os" in
5272         *sysv5*)
5273                 AC_MSG_RESULT(Using UnixWare ACLs)
5274                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5275                 default_static_modules="$default_static_modules vfs_solarisacl"
5276                 ;;
5277         *solaris*)
5278                 AC_MSG_RESULT(Using solaris ACLs)
5279                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5280                 ACL_LIBS="$ACL_LIBS -lsec"
5281                 default_static_modules="$default_static_modules vfs_solarisacl"
5282                 ;;
5283         *hpux*)
5284                 AC_MSG_RESULT(Using HPUX ACLs)
5285                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5286                 default_static_modules="$default_static_modules vfs_hpuxacl"
5287                 ;;
5288         *irix*)
5289                 AC_MSG_RESULT(Using IRIX ACLs)
5290                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5291                 default_static_modules="$default_static_modules vfs_irixacl"
5292                 ;;
5293         *aix*)
5294                 AC_MSG_RESULT(Using AIX ACLs)
5295                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5296                 default_static_modules="$default_static_modules vfs_aixacl"
5297                 ;;
5298         *osf*)
5299                 AC_MSG_RESULT(Using Tru64 ACLs)
5300                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5301                 ACL_LIBS="$ACL_LIBS -lpacl"
5302                 default_static_modules="$default_static_modules vfs_tru64acl"
5303                 ;;
5304         *freebsd[[5-9]]*)
5305                 AC_MSG_RESULT(Using FreeBSD posix ACLs)
5306                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether FreeBSD POSIX ACLs are available])
5307                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5308                 default_static_modules="$default_static_modules vfs_posixacl"
5309                 ;;
5310         *linux*)
5311                 AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5312                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5313                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
5314                         acl_LIBS=$LIBS
5315                         LIBS="$LIBS -lacl"
5316                         AC_TRY_LINK([
5317                                 #include <sys/types.h>
5318                                 #include <sys/acl.h>
5319                         ],[
5320                                 acl_t acl;
5321                                 int entry_id;
5322                                 acl_entry_t *entry_p;
5323                                 return acl_get_entry(acl, entry_id, entry_p);
5324                         ],
5325                         [samba_cv_HAVE_POSIX_ACLS=yes],
5326                         [samba_cv_HAVE_POSIX_ACLS=no])
5327                         LIBS=$acl_LIBS
5328                 ])
5329                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5330                         AC_MSG_RESULT(Using posix ACLs)
5331                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5332                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5333                                 acl_LIBS=$LIBS
5334                                 LIBS="$LIBS -lacl"
5335                                 AC_TRY_LINK([
5336                                         #include <sys/types.h>
5337                                         #include <sys/acl.h>
5338                                 ],[
5339                                         acl_permset_t permset_d;
5340                                         acl_perm_t perm;
5341                                         return acl_get_perm_np(permset_d, perm);
5342                                 ],
5343                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5344                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5345                                 LIBS=$acl_LIBS
5346                         ])
5347                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5348                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5349                         fi
5350                 fi
5351             ;;
5352          *)
5353                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5354                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
5355                         acl_LIBS=$LIBS
5356                         LIBS="$LIBS -lacl"
5357                         AC_TRY_LINK([
5358                                 #include <sys/types.h>
5359                                 #include <sys/acl.h>
5360                         ],[
5361                                 acl_t acl;
5362                                 int entry_id;
5363                                 acl_entry_t *entry_p;
5364                                 return acl_get_entry( acl, entry_id, entry_p);
5365                         ],
5366                         [samba_cv_HAVE_POSIX_ACLS=yes],
5367                         [samba_cv_HAVE_POSIX_ACLS=no])
5368                         LIBS=$acl_LIBS
5369                 ])
5370                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5371                         AC_MSG_RESULT(Using posix ACLs)
5372                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5373                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5374                                 acl_LIBS=$LIBS
5375                                 LIBS="$LIBS -lacl"
5376                                 AC_TRY_LINK([
5377                                         #include <sys/types.h>
5378                                         #include <sys/acl.h>
5379                                 ],[
5380                                         acl_permset_t permset_d;
5381                                         acl_perm_t perm;
5382                                         return acl_get_perm_np( permset_d, perm);
5383                                 ],
5384                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5385                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5386                                 LIBS=$acl_LIBS
5387                         ])
5388                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5389                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5390                         fi
5391                 fi
5392             ;;
5393         esac
5394         ;;
5395   *)
5396     AC_MSG_RESULT(no)
5397     AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5398     ;;
5399   esac ],
5400   AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5401   AC_MSG_RESULT(no)
5402 )
5403
5404 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5405    default_static_modules="$default_static_modules vfs_posixacl"
5406 fi
5407
5408 #################################################
5409 # check for AIO support
5410
5411 AC_MSG_CHECKING(whether to support asynchronous io)
5412 AC_ARG_WITH(aio-support,
5413 [  --with-aio-support      Include asynchronous io support (default=no)],
5414 [ case "$withval" in
5415   yes)
5416
5417         AC_MSG_RESULT(yes)
5418         case "$host_os" in
5419         *)
5420                 AIO_LIBS=$LIBS
5421                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5422                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5423                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5424                 aio_LIBS=$LIBS
5425                 LIBS=$AIO_LIBS
5426                 AC_TRY_LINK([#include <sys/types.h>
5427 #include <aio.h>],
5428 [ struct aiocb a; return aio_read(&a);],
5429 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5430                 LIBS=$aio_LIBS])
5431                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5432                 aio_LIBS=$LIBS
5433                 LIBS=$AIO_LIBS
5434                 AC_TRY_LINK([#include <sys/types.h>
5435 #include <aio.h>],
5436 [ struct aiocb64 a; return aio_read64(&a);],
5437 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5438                 LIBS=$aio_LIBS])
5439                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5440                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5441                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5442                         LIBS=$AIO_LIBS
5443                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5444                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5445                         LIBS=$AIO_LIBS
5446                 fi
5447
5448                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5449                         AC_MSG_CHECKING(for aio_read)
5450                         AC_LINK_IFELSE([#include <aio.h>
5451 int main() { struct aiocb a; return aio_read(&a); }],
5452 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5453 [AC_MSG_RESULT(no)])
5454
5455                         AC_MSG_CHECKING(for aio_write)
5456                         AC_LINK_IFELSE([#include <aio.h>
5457 int main() { struct aiocb a; return aio_write(&a); }],
5458 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5459 [AC_MSG_RESULT(no)])
5460
5461                         AC_MSG_CHECKING(for aio_fsync)
5462                         AC_LINK_IFELSE([#include <aio.h>
5463 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5464 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5465 [AC_MSG_RESULT(no)])
5466
5467                         AC_MSG_CHECKING(for aio_return)
5468                         AC_LINK_IFELSE([#include <aio.h>
5469 int main() { struct aiocb a; return aio_return(&a); }],
5470 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5471 [AC_MSG_RESULT(no)])
5472
5473                         AC_MSG_CHECKING(for aio_error)
5474                         AC_LINK_IFELSE([#include <aio.h>
5475 int main() { struct aiocb a; return aio_error(&a); }],
5476 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5477 [AC_MSG_RESULT(no)])
5478
5479                         AC_MSG_CHECKING(for aio_cancel)
5480                         AC_LINK_IFELSE([#include <aio.h>
5481 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5482 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5483 [AC_MSG_RESULT(no)])
5484
5485                         AC_MSG_CHECKING(for aio_suspend)
5486                         AC_LINK_IFELSE([#include <aio.h>
5487 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5488 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5489 [AC_MSG_RESULT(no)])
5490                 fi
5491
5492                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5493                         AC_MSG_CHECKING(for aio_read64)
5494                         AC_LINK_IFELSE([#include <aio.h>
5495 int main() { struct aiocb a; return aio_read64(&a); }],
5496 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5497 [AC_MSG_RESULT(no)])
5498
5499                         AC_MSG_CHECKING(for aio_write64)
5500                         AC_LINK_IFELSE([#include <aio.h>
5501 int main() { struct aiocb a; return aio_write64(&a); }],
5502 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5503 [AC_MSG_RESULT(no)])
5504
5505                         AC_MSG_CHECKING(for aio_fsync64)
5506                         AC_LINK_IFELSE([#include <aio.h>
5507 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5508 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5509 [AC_MSG_RESULT(no)])
5510
5511                         AC_MSG_CHECKING(for aio_return64)
5512                         AC_LINK_IFELSE([#include <aio.h>
5513 int main() { struct aiocb a; return aio_return64(&a); }],
5514 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5515 [AC_MSG_RESULT(no)])
5516
5517                         AC_MSG_CHECKING(for aio_error64)
5518                         AC_LINK_IFELSE([#include <aio.h>
5519 int main() { struct aiocb a; return aio_error64(&a); }],
5520 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5521 [AC_MSG_RESULT(no)])
5522
5523                         AC_MSG_CHECKING(for aio_cancel64)
5524                         AC_LINK_IFELSE([#include <aio.h>
5525 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5526 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5527 [AC_MSG_RESULT(no)])
5528
5529                         AC_MSG_CHECKING(for aio_suspend64)
5530                         AC_LINK_IFELSE([#include <aio.h>
5531 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5532 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5533 [AC_MSG_RESULT(no)])
5534                 fi
5535             ;;
5536         esac
5537         ;;
5538   *)
5539     AC_MSG_RESULT(no)
5540     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5541     ;;
5542   esac ],
5543   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5544   AC_MSG_RESULT(no)
5545 )
5546
5547 #################################################
5548 # check for sendfile support
5549
5550 with_sendfile_support=yes
5551 AC_MSG_CHECKING(whether to check to support sendfile)
5552 AC_ARG_WITH(sendfile-support,
5553 [  --with-sendfile-support Check for sendfile support (default=yes)],
5554 [ case "$withval" in
5555   yes)
5556
5557         AC_MSG_RESULT(yes);
5558
5559         case "$host_os" in
5560         linux*-gnu* | gnu* | k*bsd*-gnu)
5561                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5562                 AC_TRY_LINK([#include <sys/sendfile.h>],
5563 [\
5564 int tofd, fromfd;
5565 off64_t offset;
5566 size_t total;
5567 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5568 ],
5569 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5570
5571                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5572                 AC_TRY_LINK([#include <sys/sendfile.h>],
5573 [\
5574 int tofd, fromfd;
5575 off_t offset;
5576 size_t total;
5577 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5578 ],
5579 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5580
5581 # Try and cope with broken Linux sendfile....
5582                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5583                 AC_TRY_LINK([\
5584 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5585 #undef _FILE_OFFSET_BITS
5586 #endif
5587 #include <sys/sendfile.h>],
5588 [\
5589 int tofd, fromfd;
5590 off_t offset;
5591 size_t total;
5592 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5593 ],
5594 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5595
5596         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5597                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5598                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5599                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5600         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5601                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5602                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5603                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5604         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5605                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5606                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5607         else
5608                 AC_MSG_RESULT(no);
5609         fi
5610
5611         ;;
5612         *freebsd* | *dragonfly* )
5613                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5614                 AC_TRY_LINK([\
5615 #include <sys/types.h>
5616 #include <unistd.h>
5617 #include <sys/socket.h>
5618 #include <sys/uio.h>],
5619 [\
5620         int fromfd, tofd, ret, total=0;
5621         off_t offset, nwritten;
5622         struct sf_hdtr hdr;
5623         struct iovec hdtrl;
5624         hdr.headers = &hdtrl;
5625         hdr.hdr_cnt = 1;
5626         hdr.trailers = NULL;
5627         hdr.trl_cnt = 0;
5628         hdtrl.iov_base = NULL;
5629         hdtrl.iov_len = 0;
5630         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5631 ],
5632 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5633
5634         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5635                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5636                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5637                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5638         else
5639                 AC_MSG_RESULT(no);
5640         fi
5641         ;;
5642
5643         *hpux*)
5644                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5645                 AC_TRY_LINK([\
5646 #include <sys/socket.h>
5647 #include <sys/uio.h>],
5648 [\
5649         int fromfd, tofd;
5650         size_t total=0;
5651         struct iovec hdtrl[2];
5652         ssize_t nwritten;
5653         off64_t offset;
5654
5655         hdtrl[0].iov_base = 0;
5656         hdtrl[0].iov_len = 0;
5657
5658         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5659 ],
5660 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5661         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5662                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5663                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5664                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5665         else
5666                 AC_MSG_RESULT(no);
5667         fi
5668
5669                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5670                 AC_TRY_LINK([\
5671 #include <sys/socket.h>
5672 #include <sys/uio.h>],
5673 [\
5674         int fromfd, tofd;
5675         size_t total=0;
5676         struct iovec hdtrl[2];
5677         ssize_t nwritten;
5678         off_t offset;
5679
5680         hdtrl[0].iov_base = 0;
5681         hdtrl[0].iov_len = 0;
5682
5683         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5684 ],
5685 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5686         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5687                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5688                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5689                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5690         else
5691                 AC_MSG_RESULT(no);
5692         fi
5693         ;;
5694
5695         *solaris*)
5696                 AC_CHECK_LIB(sendfile,sendfilev)
5697                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5698                 AC_TRY_LINK([\
5699 #include <sys/sendfile.h>],
5700 [\
5701         int sfvcnt;
5702         size_t xferred;
5703         struct sendfilevec vec[2];
5704         ssize_t nwritten;
5705         int tofd;
5706
5707         sfvcnt = 2;
5708
5709         vec[0].sfv_fd = SFV_FD_SELF;
5710         vec[0].sfv_flag = 0;
5711         vec[0].sfv_off = 0;
5712         vec[0].sfv_len = 0;
5713
5714         vec[1].sfv_fd = 0;
5715         vec[1].sfv_flag = 0;
5716         vec[1].sfv_off = 0;
5717         vec[1].sfv_len = 0;
5718         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5719 ],
5720 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5721
5722         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5723                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5724                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5725                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5726         else
5727                 AC_MSG_RESULT(no);
5728         fi
5729
5730                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5731                 AC_TRY_LINK([\
5732 #include <sys/sendfile.h>],
5733 [\
5734         int sfvcnt;
5735         size_t xferred;
5736         struct sendfilevec vec[2];
5737         ssize_t nwritten;
5738         int tofd;
5739
5740         sfvcnt = 2;
5741
5742         vec[0].sfv_fd = SFV_FD_SELF;
5743         vec[0].sfv_flag = 0;
5744         vec[0].sfv_off = 0;
5745         vec[0].sfv_len = 0;
5746
5747         vec[1].sfv_fd = 0;
5748         vec[1].sfv_flag = 0;
5749         vec[1].sfv_off = 0;
5750         vec[1].sfv_len = 0;
5751         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5752 ],
5753 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5754
5755         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5756                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5757                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5758                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5759         else
5760                 AC_MSG_RESULT(no);
5761         fi
5762         ;;
5763         *aix*)
5764                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5765                 AC_TRY_LINK([\
5766 #include <sys/socket.h>],
5767 [\
5768         int fromfd, tofd;
5769         size_t total=0;
5770         struct sf_parms hdtrl;
5771         ssize_t nwritten;
5772         off64_t offset;
5773
5774         hdtrl.header_data = 0;
5775         hdtrl.header_length = 0;
5776         hdtrl.file_descriptor = fromfd;
5777         hdtrl.file_offset = 0;
5778         hdtrl.file_bytes = 0;
5779         hdtrl.trailer_data = 0;
5780         hdtrl.trailer_length = 0;
5781
5782         nwritten = send_file(&tofd, &hdtrl, 0);
5783 ],
5784 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5785         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5786                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5787                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5788                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5789         else
5790                 AC_MSG_RESULT(no);
5791         fi
5792         ;;
5793         *)
5794         ;;
5795         esac
5796         ;;
5797   *)
5798     AC_MSG_RESULT(no)
5799     ;;
5800   esac ],
5801   AC_MSG_RESULT(yes)
5802 )
5803
5804 ############################################
5805 # See if we have the Linux readahead syscall.
5806
5807 AC_CACHE_CHECK([for Linux readahead],
5808                 samba_cv_HAVE_LINUX_READAHEAD,[
5809
5810     AC_TRY_LINK([
5811 #if defined(HAVE_UNISTD_H)
5812 #include <unistd.h>
5813 #endif
5814 #include <fcntl.h>],
5815     [ssize_t err = readahead(0,0,0x80000);],
5816     samba_cv_HAVE_LINUX_READAHEAD=yes,
5817     samba_cv_HAVE_LINUX_READAHEAD=no)])
5818
5819 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5820   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5821              [Whether Linux readahead is available])
5822 fi
5823
5824 ############################################
5825 # See if we have the posix_fadvise syscall.
5826
5827 AC_CACHE_CHECK([for posix_fadvise],
5828                 samba_cv_HAVE_POSIX_FADVISE,[
5829     AC_TRY_LINK([
5830 #if defined(HAVE_UNISTD_H)
5831 #include <unistd.h>
5832 #endif
5833 #include <fcntl.h>],
5834     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5835     samba_cv_HAVE_POSIX_FADVISE=yes,
5836     samba_cv_HAVE_POSIX_FADVISE=no)])
5837
5838 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5839   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5840              [Whether posix_fadvise is available])
5841 fi
5842
5843
5844
5845 #################################################
5846 # Check whether winbind is supported on this platform.  If so we need to
5847 # build and install client programs, sbin programs and shared libraries
5848
5849 AC_MSG_CHECKING(whether to build winbind)
5850
5851 # Initially, the value of $host_os decides whether winbind is supported
5852
5853 HAVE_WINBIND=yes
5854
5855 # Define the winbind shared library name and any specific linker flags
5856 # it needs to be built with.
5857
5858 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
5859 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
5860 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5861 NSSSONAMEVERSIONSUFFIX=""
5862
5863 SMB_KRB5_LOCATOR="bin/smb_krb5_locator.$SHLIBEXT"
5864
5865 case "$host_os" in
5866         linux*-gnu* | gnu* | k*bsd*-gnu)
5867                 NSSSONAMEVERSIONSUFFIX=".2"
5868                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
5869                 ;;
5870         freebsd5*|*freebsd[[6-9]]*)
5871                 # FreeBSD winbind client is implemented as a wrapper around
5872                 # the Linux version.
5873                 NSSSONAMEVERSIONSUFFIX=".1"
5874                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
5875                     nsswitch/winbind_nss_linux.o"
5876                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5877                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5878                 ;;
5879
5880         *netbsd*[[3-9]]*)
5881                 # NetBSD winbind client is implemented as a wrapper
5882                 # around the Linux version. It needs getpwent_r() to
5883                 # indicate libc's use of the correct nsdispatch API.
5884                 #
5885                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5886                         WINBIND_NSS_EXTRA_OBJS="\
5887                             nsswitch/winbind_nss_netbsd.o \
5888                             nsswitch/winbind_nss_linux.o"
5889                         WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5890                         WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5891                 else
5892                         HAVE_WINBIND=no
5893                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5894                 fi
5895                 ;;
5896         *irix*)
5897                 # IRIX has differently named shared libraries
5898                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
5899                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
5900                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
5901                 ;;
5902         *solaris*)
5903                 # Solaris winbind client is implemented as a wrapper around
5904                 # the Linux version.
5905                 NSSSONAMEVERSIONSUFFIX=".1"
5906                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
5907                     nsswitch/winbind_nss_linux.o"
5908                 WINBIND_NSS_EXTRA_LIBS="-lsocket"
5909                 ;;
5910         *hpux11*)
5911                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
5912                 ;;
5913         *aix*)
5914                 # AIX has even differently named shared libraries.  No
5915                 # WINS support has been implemented yet.
5916                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
5917                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5918                 WINBIND_NSS="nsswitch/WINBIND"
5919                 WINBIND_WINS_NSS=""
5920                 ;;
5921         *)
5922                 HAVE_WINBIND=no
5923                 winbind_no_reason=", unsupported on $host_os"
5924                 ;;
5925 esac
5926
5927 AC_SUBST(WINBIND_NSS)
5928 AC_SUBST(WINBIND_WINS_NSS)
5929 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
5930 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
5931 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
5932 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
5933
5934 AC_SUBST(SMB_KRB5_LOCATOR)
5935
5936 # Check the setting of --with-winbind
5937
5938 AC_ARG_WITH(winbind,
5939 [  --with-winbind          Build winbind (default, if supported by OS)],
5940 [
5941   case "$withval" in
5942         yes)
5943                 HAVE_WINBIND=yes
5944                 ;;
5945         no)
5946                 HAVE_WINBIND=no
5947                 winbind_reason=""
5948                 ;;
5949   esac ],
5950 )
5951
5952 # We need unix domain sockets for winbind
5953
5954 if test x"$HAVE_WINBIND" = x"yes"; then
5955         if test x"$samba_cv_unixsocket" = x"no"; then
5956                 winbind_no_reason=", no unix domain socket support on $host_os"
5957                 HAVE_WINBIND=no
5958         fi
5959 fi
5960
5961 # Display test results
5962
5963 if test x"$HAVE_WINBIND" = x"no"; then
5964         WINBIND_NSS=""
5965         WINBIND_WINS_NSS=""
5966 fi
5967
5968 if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes"; then
5969         NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
5970 fi
5971
5972 if test x"$HAVE_WINBIND" = x"yes"; then
5973         AC_MSG_RESULT(yes)
5974         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
5975
5976         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
5977         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
5978         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
5979                 PAM_MODULES="$PAM_MODULES pam_winbind"
5980                 INSTALL_PAM_MODULES="installpammodules"
5981                 UNINSTALL_PAM_MODULES="uninstallpammodules"
5982         fi
5983 else
5984         AC_MSG_RESULT(no$winbind_no_reason)
5985 fi
5986
5987 # Solaris 10 does have new member in nss_XbyY_key
5988 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
5989                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
5990                 [#include <nss_dbdefs.h>])
5991
5992 # Solaris has some extra fields in struct passwd that need to be
5993 # initialised otherwise nscd crashes.
5994
5995 AC_CHECK_MEMBER(struct passwd.pw_comment,
5996                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
5997                 [#include <pwd.h>])
5998
5999 AC_CHECK_MEMBER(struct passwd.pw_age,
6000                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6001                 [#include <pwd.h>])
6002
6003 # AIX 4.3.x and 5.1 do not have as many members in
6004 # struct secmethod_table as AIX 5.2
6005 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6006        [#include <usersec.h>])
6007 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6008        [#include <usersec.h>])
6009
6010 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6011 AC_TRY_COMPILE([#include <sys/types.h>
6012 #include <sys/socket.h>],
6013 [struct ucred cred;
6014  socklen_t cred_len;
6015  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6016 ],
6017 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6018 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6019     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6020 fi
6021
6022 #################################################
6023 # Check to see if we should use the included popt
6024
6025 AC_ARG_WITH(included-popt,
6026 [  --with-included-popt    use bundled popt library, not from system],
6027 [
6028   case "$withval" in
6029         yes)
6030                 INCLUDED_POPT=yes
6031                 ;;
6032         no)
6033                 INCLUDED_POPT=no
6034                 ;;
6035   esac ],
6036 )
6037 if test x"$INCLUDED_POPT" != x"yes"; then
6038     AC_CHECK_LIB(popt, poptGetContext,
6039                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6040 fi
6041
6042 AC_MSG_CHECKING(whether to use included popt)
6043 if test x"$INCLUDED_POPT" = x"yes"; then
6044     AC_MSG_RESULT(yes)
6045     BUILD_POPT='$(POPT_OBJ)'
6046     POPTLIBS='$(POPT_OBJ)'
6047     FLAGS1="-I\$(srcdir)/popt"
6048 else
6049     AC_MSG_RESULT(no)
6050     BUILD_POPT=""
6051     POPTLIBS="-lpopt"
6052 fi
6053 AC_SUBST(BUILD_POPT)
6054 AC_SUBST(POPTLIBS)
6055 AC_SUBST(FLAGS1)
6056
6057 #################################################
6058 # Check to see if we should use the included iniparser
6059
6060 AC_ARG_WITH(included-iniparser,
6061 [  --with-included-iniparser    use bundled iniparser library, not from system],
6062 [
6063   case "$withval" in
6064         yes)
6065                 INCLUDED_INIPARSER=yes
6066                 ;;
6067         no)
6068                 INCLUDED_INIPARSER=no
6069                 ;;
6070   esac ],
6071 )
6072 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6073     AC_CHECK_LIB(iniparser, iniparser_load,
6074                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6075 fi
6076
6077 AC_MSG_CHECKING(whether to use included iniparser)
6078 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6079     AC_MSG_RESULT(yes)
6080     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6081         INIPARSERLIBS=""
6082     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
6083 else
6084     AC_MSG_RESULT(no)
6085         BUILD_INIPARSER=""
6086     INIPARSERLIBS="-liniparser"
6087 fi
6088 AC_SUBST(BUILD_INIPARSER)
6089 AC_SUBST(INIPARSERLIBS)
6090 AC_SUBST(FLAGS1)
6091
6092
6093
6094 #################################################
6095 # Check if the user wants Python
6096
6097 # At the moment, you can use this to set which Python binary to link
6098 # against.  (Libraries built for Python2.2 can't be used by 2.1,
6099 # though they can coexist in different directories.)  In the future
6100 # this might make the Python stuff be built by default.
6101
6102 # Defaulting python breaks the clean target if python isn't installed
6103
6104 PYTHON=
6105
6106 AC_ARG_WITH(python,
6107 [  --with-python=PYTHONNAME  build Python libraries],
6108 [ case "${withval-python}" in
6109   yes)
6110         PYTHON=python
6111         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS python_ext"
6112         ;;
6113   no)
6114         PYTHON=
6115         ;;
6116   *)
6117         PYTHON=${withval-python}
6118         ;;
6119   esac ])
6120 AC_SUBST(PYTHON)
6121
6122 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6123 do
6124         eval MODULE_DEFAULT_$i=STATIC
6125 done
6126
6127 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6128 do
6129         dnl Fall back to static if we cannot build shared libraries
6130         eval MODULE_DEFAULT_$i=STATIC
6131
6132         if test $BLDSHARED = true; then
6133                 eval MODULE_DEFAULT_$i=SHARED
6134         fi
6135 done
6136
6137 dnl Always built these modules static
6138 MODULE_rpc_spoolss=STATIC
6139 MODULE_rpc_srvsvc=STATIC
6140 MODULE_idmap_tdb=STATIC
6141 MODULE_idmap_passdb=STATIC
6142 MODULE_idmap_nss=STATIC
6143
6144 MODULE_nss_info_template=STATIC
6145
6146 AC_ARG_WITH(static-modules,
6147 [  --with-static-modules=MODULES  Comma-separated list of names of modules to statically link in],
6148 [ if test $withval; then
6149         for i in `echo $withval | sed -e 's/,/ /g'`
6150         do
6151                 eval MODULE_$i=STATIC
6152         done
6153 fi ])
6154
6155 AC_ARG_WITH(shared-modules,
6156 [  --with-shared-modules=MODULES  Comma-separated list of names of modules to build shared],
6157 [ if test $withval; then
6158         for i in `echo $withval | sed -e 's/,/ /g'`
6159         do
6160                         eval MODULE_$i=SHARED
6161         done
6162 fi ])
6163
6164 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
6165                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6166 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6167 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6168 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6169
6170
6171 SMB_MODULE(rpc_lsa, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
6172 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
6173 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
6174 SMB_MODULE(rpc_lsa_ds, \$(RPC_LSA_DS_OBJ), "bin/librpc_lsa_ds.$SHLIBEXT", RPC)
6175 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6176 SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC)
6177 SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC)
6178 SMB_MODULE(rpc_net, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6179 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6180 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_srvsvc.$SHLIBEXT", RPC)
6181 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6182 SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC)
6183 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6184 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_echo.$SHLIBEXT", RPC)
6185 SMB_MODULE(rpc_unixinfo, \$(RPC_UNIXINFO_OBJ), "bin/librpc_unixinfo.$SHLIBEXT", RPC)
6186 SMB_MODULE(rpc_epmapper, \$(RPC_EPMAPPER_OBJ), "bin/librpc_epmapper.$SHLIBEXT", RPC)
6187 SMB_SUBSYSTEM(RPC,smbd/server.o)
6188
6189 SMB_MODULE(idmap_ldap, nsswitch/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6190 SMB_MODULE(idmap_tdb, nsswitch/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6191 SMB_MODULE(idmap_passdb, nsswitch/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6192 SMB_MODULE(idmap_nss, nsswitch/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6193 SMB_MODULE(idmap_rid, nsswitch/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6194 SMB_MODULE(idmap_ad, nsswitch/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6195 SMB_SUBSYSTEM(IDMAP, nsswitch/idmap.o)
6196
6197 SMB_MODULE(nss_info_template, nsswitch/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6198 SMB_SUBSYSTEM(NSS_INFO, nsswitch/nss_info.o)
6199
6200 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6201 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6202 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6203 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6204 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6205
6206 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6207 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6208 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6209 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6210 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6211 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6212 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6213 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6214
6215 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6216 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6217 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6218 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6219 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6220 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6221 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6222 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6223 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6224 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6225 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6226 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6227 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6228 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6229 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6230 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6231 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6232 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6233 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6234 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6235 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6236 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6237 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6238 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6239 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6240 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6241 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6242
6243 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6244
6245 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6246
6247 #################################################
6248 # do extra things if we are running insure
6249
6250 if test "${ac_cv_prog_CC}" = "insure"; then
6251         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6252 fi
6253
6254 #################################################
6255 # If run from the build farm, enable NASTY hacks
6256 #################################################
6257 AC_MSG_CHECKING(whether to enable build farm hacks)
6258 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6259         AC_MSG_RESULT(yes)
6260         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6261 else
6262         AC_MSG_RESULT(no)
6263 fi
6264
6265 #################################################
6266 # check for bad librt/libpthread interactions
6267
6268 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6269     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6270     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6271     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6272
6273 SMB_IF_RTSIGNAL_BUG(
6274         [
6275             # Have RT_SIGNAL bug, need to check whether the problem will
6276             # affect anything we have configured.
6277
6278             rt_do_error=no
6279             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6280                 if test x"$rt_signal_lease_ok" = x"no" ; then
6281                     rt_do_error=yes
6282                 fi
6283             fi
6284
6285             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6286                 if test x"$rt_signal_notify_ok" = x"no" ; then
6287                     rt_do_error=yes
6288                 fi
6289             fi
6290
6291             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6292                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6293                 if test x"$rt_signal_aio_ok" = x"no" ; then
6294                     rt_do_error=yes
6295                 fi
6296             fi
6297
6298             if test x"$rt_do_error" = x"yes" ; then
6299                 SMB_IS_LIBPTHREAD_LINKED(
6300                     [
6301                         cat<<MSG
6302
6303 *** On this platforms, linking Samba against pthreads causes problems
6304 *** with the oplock and change notification mechanisms. You may be
6305 *** using pthreads as a side-effect of using the --with-aio-support
6306 *** or --with-profiling-data options. Please remove these and try again.
6307
6308 MSG
6309                     ],
6310                     [
6311                         cat<<MSG
6312
6313 *** On this platform, the oplock and change notification mechanisms do not
6314 *** appear to work. Please report this problem to samba-technical@samba.org
6315 *** and attach the config.log file from this directory.
6316
6317 MSG
6318                     ])
6319                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6320             fi
6321         ],
6322         [
6323             # no RT_SIGNAL bug, we are golden
6324             SMB_IS_LIBPTHREAD_LINKED(
6325                 [
6326                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6327                 ])
6328
6329         ],
6330         [
6331             # cross compiling, I hope you know what you are doing
6332             true
6333         ])
6334
6335 fi
6336
6337 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6338 LIB_REMOVE_USR_LIB(LDFLAGS)
6339 LIB_REMOVE_USR_LIB(LIBS)
6340 LIB_REMOVE_USR_LIB(KRB5_LIBS)
6341
6342 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6343 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6344 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6345
6346 #################################################
6347 # Display summary of libraries detected
6348
6349 AC_MSG_RESULT([Using libraries:])
6350 AC_MSG_RESULT([    LIBS = $LIBS])
6351 if test x"$with_ads_support" != x"no"; then
6352     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6353 fi
6354 if test x"$with_ldap_support" != x"no"; then
6355     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6356 fi
6357 if test x"$with_dnsupdate_support" != x"no"; then
6358     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6359 fi
6360 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6361
6362 #################################################
6363 # final configure stuff
6364
6365 AC_MSG_CHECKING([configure summary])
6366 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
6367            AC_MSG_RESULT(yes),
6368            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6369            AC_MSG_WARN([cannot run when cross-compiling]))
6370
6371 dnl Merge in developer cflags from now on
6372 if test x"$developer" = x"yes"; then
6373     CFLAGS="${CFLAGS} ${DEVELOPER_CFLAGS}"
6374 fi
6375
6376 builddir=`pwd`
6377 AC_SUBST(builddir)
6378
6379 # Stuff the smbd-only libraries at the end of the smbd link
6380 # path (if we have them).
6381 SMBD_LIBS="$samba_dmapi_libs"
6382 AC_SUBST(SMBD_LIBS)
6383
6384 AC_OUTPUT(include/stamp-h Makefile script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh)
6385
6386 #################################################
6387 # Print very concise instructions on building/use
6388 if test "x$enable_dmalloc" = xyes
6389 then
6390         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6391         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
6392 fi