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