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