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