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