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