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