r22976: whoops typo
[samba.git] / source / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.53 or above
4 AC_PREREQ(2.53)
5 AC_INIT(include/includes.h)
6 AC_CONFIG_HEADER(include/config.h)
7 AC_DEFINE(CONFIG_H_IS_FROM_SAMBA,1,[Marker for samba's config.h])
8
9 case "$PATH" in
10     */usr/ucb*)
11         AC_MSG_WARN([\$PATH contains /usr/ucb - build errors may follow])
12         ;;
13 esac 
14
15 SMB_VERSION_STRING=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_OFFICIAL_STRING' | cut -d '"' -f2`
16 echo "SAMBA VERSION: ${SMB_VERSION_STRING}"
17
18 SAMBA_VERSION_SVN_REVISION=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_SVN_REVISION' | cut -d ' ' -f3-`
19 if test -n "${SAMBA_VERSION_SVN_REVISION}";then
20         echo "BUILD REVISION: ${SAMBA_VERSION_SVN_REVISION}"
21 fi
22
23 AC_LIBREPLACE_LOCATION_CHECKS
24
25 AC_DISABLE_STATIC
26 AC_ENABLE_SHARED
27
28 #################################################
29 # Directory handling stuff to support both the
30 # legacy SAMBA directories and FHS compliant
31 # ones...
32 AC_PREFIX_DEFAULT(/usr/local/samba)
33
34 rootsbindir="\${SBINDIR}"
35 lockdir="\${VARDIR}/locks"
36 piddir="\${VARDIR}/locks"
37 test "${mandir}" || mandir="\${prefix}/man"
38 logfilebase="\${VARDIR}"
39 privatedir="\${prefix}/private"
40 test "${libdir}" || libdir="\${prefix}/lib"
41 pammodulesdir="\${LIBDIR}/security"
42 configdir="\${LIBDIR}"
43 swatdir="\${prefix}/swat"
44
45 AC_ARG_WITH(fhs,
46 [  --with-fhs              Use FHS-compliant paths (default=no)],
47 [ case "$withval" in
48   yes)
49     lockdir="\${VARDIR}/lib/samba"
50     piddir="\${VARDIR}/run"
51     mandir="\${prefix}/share/man"
52     logfilebase="\${VARDIR}/log/samba"
53     privatedir="\${CONFIGDIR}/private"
54     libdir="\${prefix}/lib/samba"
55     configdir="\${sysconfdir}/samba"
56     swatdir="\${DATADIR}/samba/swat"
57     ;;
58   esac])
59
60 #################################################
61 # set private directory location
62 AC_ARG_WITH(privatedir,
63 [  --with-privatedir=DIR   Where to put smbpasswd ($ac_default_prefix/private)],
64 [ case "$withval" in
65   yes|no)
66   #
67   # Just in case anybody calls it without argument
68   #
69     AC_MSG_WARN([--with-privatedir called without argument - will use default])
70   ;;
71   * )
72     privatedir="$withval"
73     ;;
74   esac])
75
76 #################################################
77 # set root sbin directory location
78 AC_ARG_WITH(rootsbindir,
79 [  --with-rootsbindir=DIR  Which directory to use for root sbin ($ac_default_prefix/sbin)],
80 [ case "$withval" in
81   yes|no)
82   #
83   # Just in case anybody calls it without argument
84   #
85     AC_MSG_WARN([--with-rootsbindir called without argument - will use default])
86   ;;
87   * )
88     rootsbindir="$withval"
89     ;;
90   esac])
91
92 #################################################
93 # set lock directory location
94 AC_ARG_WITH(lockdir,
95 [  --with-lockdir=DIR      Where to put lock files ($ac_default_prefix/var/locks)],
96 [ case "$withval" in
97   yes|no)
98   #
99   # Just in case anybody calls it without argument
100   #
101     AC_MSG_WARN([--with-lockdir called without argument - will use default])
102   ;;
103   * )
104     lockdir="$withval"
105     ;;
106   esac])
107
108 #################################################
109 # set pid directory location
110 AC_ARG_WITH(piddir,
111 [  --with-piddir=DIR       Where to put pid files ($ac_default_prefix/var/locks)],
112 [ case "$withval" in
113   yes|no)
114   #
115   # Just in case anybody calls it without argument
116   #
117     AC_MSG_WARN([--with-piddir called without argument - will use default])
118   ;;
119   * )
120     piddir="$withval"
121     ;;
122   esac])
123
124 #################################################
125 # set SWAT directory location
126 AC_ARG_WITH(swatdir,
127 [  --with-swatdir=DIR      Where to put SWAT files ($ac_default_prefix/swat)],
128 [ case "$withval" in
129   yes|no)
130   #
131   # Just in case anybody does it
132   #
133     AC_MSG_WARN([--with-swatdir called without argument - will use default])
134   ;;
135   * )
136     swatdir="$withval"
137     ;;
138   esac])
139
140 #################################################
141 # set configuration directory location
142 AC_ARG_WITH(configdir,
143 [  --with-configdir=DIR    Where to put configuration files ($libdir)],
144 [ case "$withval" in
145   yes|no)
146   #
147   # Just in case anybody does it
148   #
149     AC_MSG_WARN([--with-configdir called without argument - will use default])
150   ;;
151   * )
152     configdir="$withval"
153     ;;
154   esac])
155
156 #################################################
157 # set log directory location
158 AC_ARG_WITH(logfilebase,
159 [  --with-logfilebase=DIR  Where to put log files ($VARDIR)],
160 [ case "$withval" in
161   yes|no)
162   #
163   # Just in case anybody does it
164   #
165     AC_MSG_WARN([--with-logfilebase called without argument - will use default])
166   ;;
167   * )
168     logfilebase="$withval"
169     ;;
170   esac])
171
172 #################################################
173 # 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"
1912                         fi
1913                         if test "$host_cpu" = "ia64"; then
1914                                 SHLIBEXT="so"
1915                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1916                         else
1917                                 SHLIBEXT="sl"
1918                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1919                         fi
1920                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1921                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1922                         ;;
1923                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1924                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1925                         ;;
1926                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1927                         BLDSHARED="true"
1928                         LDSHFLAGS="-shared"
1929                         SONAMEFLAG="-Wl,-soname,"
1930                         PICFLAG="-fPIC"
1931                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1932                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1933                         ;;
1934                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1935                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1936                         ;;
1937                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1938                         BLDSHARED="true"
1939                         LDSHFLAGS="-shared"
1940                         SONAMEFLAG="-Wl,-soname,"
1941                         PICFLAG="-KPIC"
1942                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1943                         ;;
1944                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1945                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1946                         ;;
1947                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1948                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1949                         ;;
1950                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1951                         case "$host" in
1952                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1953                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1954                                         fi
1955                                         LDSHFLAGS="-G"
1956                                         DYNEXP="-Bexport"
1957                                 ;;
1958                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1959                         esac
1960                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1961                         ;;
1962
1963                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1964                         if [ test "$GCC" != yes ]; then
1965                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1966                         fi
1967                         LDSHFLAGS="-G"
1968                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1969                         ;;
1970                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1971                         BLDSHARED="false"
1972                         LDSHFLAGS=""
1973                         ;;
1974
1975                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1976                         BLDSHARED="true"
1977                         LDSHFLAGS="-bundle -flat_namespace -undefined suppress"
1978                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/modules/exports.darwin"
1979                         SHLIBEXT="dylib"
1980                         # Since gcc doesn't fail on unrecognised options, the
1981                         # PIE test incorrectly succeeds. Darwin gcc does not
1982                         # actually support the PIE stuff.
1983                         PIE_LDFLAGS=
1984                         PIE_CFLAGS=
1985                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1986                         ;;
1987
1988                 *)
1989                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1990                         ;;
1991 esac
1992
1993 if test "$enable_shared" != "yes"; then
1994         BLDSHARED=false
1995 fi
1996
1997 AC_MSG_RESULT($BLDSHARED)
1998
1999 AC_MSG_CHECKING([LDFLAGS])
2000 AC_MSG_RESULT([$LDFLAGS])
2001 AC_MSG_CHECKING([DYNEXP])
2002 AC_MSG_RESULT([$DYNEXP])
2003
2004 #######################################################
2005 # test whether building a shared library actually works
2006 if test $BLDSHARED = true; then
2007
2008 AC_MSG_CHECKING([SHLD])
2009 AC_MSG_RESULT([$SHLD])
2010 AC_MSG_CHECKING([LDSHFLAGS])
2011 AC_MSG_RESULT([$LDSHFLAGS])
2012
2013 AC_MSG_CHECKING([SHLIBEXT])
2014 AC_MSG_RESULT([$SHLIBEXT])
2015 AC_MSG_CHECKING([SONAMEFLAG])
2016 AC_MSG_RESULT([$SONAMEFLAG])
2017
2018 AC_MSG_CHECKING([PICFLAG])
2019 AC_MSG_RESULT([$PICFLAG])
2020
2021 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
2022 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
2023
2024 AC_CACHE_CHECK([whether building shared libraries actually works],
2025                [ac_cv_shlib_works],[
2026    # try building a trivial shared library
2027    ac_cv_shlib_works=no
2028    # The $SHLD and $LDSHFLAGS variables may contain references to other
2029    # variables so they need to be eval'ed.
2030    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
2031         shlib.o ${srcdir-.}/tests/shlib.c && \
2032    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
2033         shlib.o && ac_cv_shlib_works=yes
2034    rm -f "shlib.$SHLIBEXT" shlib.o
2035
2036 ])
2037 if test $ac_cv_shlib_works = no; then
2038    BLDSHARED=false
2039 fi
2040 fi
2041
2042 if test x"$BLDSHARED" != x"true"; then
2043         LDSHFLAGS="shared-libraries-disabled"
2044         SONAMEFLAG="shared-libraries-disabled"
2045         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
2046         SHLD="shared-libraries-disabled"
2047         PICFLAG="${PIE_CFLAGS}"
2048         SHLIBEXT="shared_libraries_disabled"
2049 fi
2050
2051 AC_MSG_CHECKING([used PICFLAG])
2052 AC_MSG_RESULT([$PICFLAG])
2053
2054 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
2055
2056 ################
2057
2058 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
2059 AC_TRY_RUN([#include <stdio.h>
2060 int main() { long long x = 1000000; x *= x; return ((x/1000000) == 1000000)? 0: 1; }],
2061 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
2062 if test x"$samba_cv_have_longlong" = x"yes"; then
2063     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
2064     AC_CHECK_TYPE(intptr_t, unsigned long long)
2065 else
2066     AC_CHECK_TYPE(intptr_t, unsigned long)
2067 fi
2068
2069 #
2070 # Check if the compiler supports the LL prefix on long long integers.
2071 # AIX needs this.
2072
2073 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
2074     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
2075         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
2076 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
2077    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
2078 fi
2079
2080
2081 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2082 AC_TRY_RUN([#include <stdio.h>
2083 #include <sys/stat.h>
2084 int main() { return (sizeof(off_t) == 8) ? 0 : 1; }],
2085 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2086 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
2087     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
2088 fi
2089
2090 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
2091 AC_TRY_RUN([
2092 #if defined(HAVE_UNISTD_H)
2093 #include <unistd.h>
2094 #endif
2095 #include <stdio.h>
2096 #include <sys/stat.h>
2097 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; }],
2098 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
2099 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
2100     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
2101 fi
2102
2103 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2104 AC_TRY_RUN([
2105 #if defined(HAVE_UNISTD_H)
2106 #include <unistd.h>
2107 #endif
2108 #include <stdio.h>
2109 #include <sys/stat.h>
2110 int main() { return (sizeof(ino_t) == 8) ? 0 : 1; }],
2111 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2112 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2113     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2114 fi
2115
2116 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
2117 AC_TRY_RUN([
2118 #if defined(HAVE_UNISTD_H)
2119 #include <unistd.h>
2120 #endif
2121 #include <stdio.h>
2122 #include <sys/stat.h>
2123 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; }],
2124 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
2125 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
2126     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
2127 fi
2128
2129 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2130 AC_TRY_RUN([
2131 #if defined(HAVE_UNISTD_H)
2132 #include <unistd.h>
2133 #endif
2134 #include <stdio.h>
2135 #include <sys/stat.h>
2136 int main() { return (sizeof(dev_t) == 8) ? 0 : 1; }],
2137 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2138 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2139     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2140 fi
2141
2142 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2143 AC_TRY_RUN([
2144 #if defined(HAVE_UNISTD_H)
2145 #include <unistd.h>
2146 #endif
2147 #include <stdio.h>
2148 #include <sys/stat.h>
2149 int main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) return 1; return (lstat64("/dev/null", &st)==0)?0:1; }],
2150 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2151 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2152     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2153 fi
2154
2155 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2156 AC_TRY_COMPILE([
2157 #if defined(HAVE_UNISTD_H)
2158 #include <unistd.h>
2159 #endif
2160 #include <sys/types.h>
2161 #include <dirent.h>],
2162 [DIR64 de;],
2163 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2164 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2165     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2166 fi
2167
2168 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2169 AC_TRY_COMPILE([
2170 #if defined(HAVE_UNISTD_H)
2171 #include <unistd.h>
2172 #endif
2173 #include <sys/types.h>
2174 #include <dirent.h>],
2175 [struct dirent64 de;],
2176 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2177 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2178     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2179 fi
2180
2181 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2182 AC_TRY_RUN([
2183 #if defined(HAVE_UNISTD_H)
2184 #include <unistd.h>
2185 #endif
2186 #include <sys/types.h>
2187 int main() { dev_t dev; int i = major(dev); return 0; }],
2188 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2189 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2190     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2191 fi
2192
2193 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2194 AC_TRY_RUN([
2195 #if defined(HAVE_UNISTD_H)
2196 #include <unistd.h>
2197 #endif
2198 #include <sys/types.h>
2199 int main() { dev_t dev; int i = minor(dev); return 0; }],
2200 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2201 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2202     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2203 fi
2204
2205 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2206 AC_TRY_RUN([
2207 #if defined(HAVE_UNISTD_H)
2208 #include <unistd.h>
2209 #endif
2210 #include <sys/types.h>
2211 int main() { dev_t dev = makedev(1,2); return 0; }],
2212 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2213 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2214     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2215 fi
2216
2217 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2218 AC_TRY_RUN([#include <stdio.h>
2219 int main() { char c; c=250; return (c > 0)?0:1; }],
2220 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2221 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2222     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2223 fi
2224
2225 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
2226 AC_TRY_COMPILE([#include <sys/types.h>
2227 #include <sys/socket.h>
2228 #include <netinet/in.h>],
2229 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
2230 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
2231 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
2232     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
2233 fi
2234
2235 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2236 AC_TRY_COMPILE([#include <sys/types.h>
2237 #include <dirent.h>
2238 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2239 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2240 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2241     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2242 fi
2243
2244 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2245 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2246 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2247 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2248     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2249 fi
2250
2251 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2252 AC_TRY_LINK([
2253 #include <sys/time.h>
2254 #include <unistd.h>], [struct timeval tv; return gettimeofday(&tv, NULL);],
2255            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,
2256            samba_cv_HAVE_GETTIMEOFDAY_TZ=no)])
2257 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2258     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday takes a tz argument])
2259 fi
2260
2261 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2262
2263     # On some systems (eg. Linux) librt can pull in libpthread. We
2264     # don't want this to happen because libpthreads changes signal delivery
2265     # semantics in ways we are not prepared for. This breaks Linux oplocks
2266     # which rely on signals.
2267
2268     AC_LIBTESTFUNC(rt, clock_gettime,
2269             [
2270                 AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2271                     [Whether clock_gettime is available])
2272                 SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2273                 SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2274                 SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2275             ])
2276
2277 fi
2278
2279 AC_CACHE_CHECK([for va_copy],samba_cv_HAVE_VA_COPY,[
2280 AC_TRY_LINK([#include <stdarg.h>
2281 va_list ap1,ap2;], [va_copy(ap1,ap2);],
2282 samba_cv_HAVE_VA_COPY=yes,
2283 samba_cv_HAVE_VA_COPY=no)])
2284 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
2285     AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
2286 else
2287     AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE___VA_COPY,[
2288     AC_TRY_LINK([#include <stdarg.h>
2289     va_list ap1,ap2;], [__va_copy(ap1,ap2);],
2290     samba_cv_HAVE___VA_COPY=yes,
2291     samba_cv_HAVE___VA_COPY=no)])
2292     if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
2293         AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
2294     fi
2295 fi
2296
2297 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
2298 AC_TRY_RUN([
2299 #include <sys/types.h>
2300 #include <stdarg.h>
2301 void foo(const char *format, ...) {
2302        va_list ap;
2303        int len;
2304        char buf[5];
2305
2306        va_start(ap, format);
2307        len = vsnprintf(buf, 0, format, ap);
2308        va_end(ap);
2309        if (len != 5) return 1;
2310
2311        va_start(ap, format);
2312        len = vsnprintf(0, 0, format, ap);
2313        va_end(ap);
2314        if (len != 5) return 1;
2315
2316        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) return 1;
2317
2318        return 0;
2319 }
2320 int main() { foo("hello"); }
2321 ],
2322 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
2323 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
2324     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
2325 fi
2326
2327 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2328 AC_TRY_RUN([#include <sys/types.h>
2329 #include <dirent.h>
2330 int main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2331 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2332 di->d_name[0] == 0) return 0; return 1;} ],
2333 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2334 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2335     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2336 fi
2337
2338 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2339 AC_TRY_COMPILE([#include <sys/types.h>
2340 #include <utime.h>],
2341 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; return utime("foo.c",&tbuf);],
2342 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2343 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2344     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2345 fi
2346
2347 ##############
2348 # Check utmp details, but only if our OS offers utmp.h
2349 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2350 dnl  utmp and utmpx come in many flavours
2351 dnl  We need to check for many of them
2352 dnl  But we don't need to do each and every one, because our code uses
2353 dnl  mostly just the utmp (not utmpx) fields.
2354
2355 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2356
2357 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2358 AC_TRY_COMPILE([#include <sys/types.h>
2359 #include <utmp.h>],
2360 [struct utmp ut;  ut.ut_name[0] = 'a';],
2361 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2362 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2363     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2364 fi
2365
2366 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2367 AC_TRY_COMPILE([#include <sys/types.h>
2368 #include <utmp.h>],
2369 [struct utmp ut;  ut.ut_user[0] = 'a';],
2370 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2371 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2372     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2373 fi
2374
2375 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2376 AC_TRY_COMPILE([#include <sys/types.h>
2377 #include <utmp.h>],
2378 [struct utmp ut;  ut.ut_id[0] = 'a';],
2379 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2380 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2381     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2382 fi
2383
2384 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2385 AC_TRY_COMPILE([#include <sys/types.h>
2386 #include <utmp.h>],
2387 [struct utmp ut;  ut.ut_host[0] = 'a';],
2388 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2389 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2390     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2391 fi
2392
2393 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2394 AC_TRY_COMPILE([#include <sys/types.h>
2395 #include <utmp.h>],
2396 [struct utmp ut;  time_t t; ut.ut_time = t;],
2397 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2398 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2399     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2400 fi
2401
2402 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2403 AC_TRY_COMPILE([#include <sys/types.h>
2404 #include <utmp.h>],
2405 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2406 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2407 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2408     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2409 fi
2410
2411 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2412 AC_TRY_COMPILE([#include <sys/types.h>
2413 #include <utmp.h>],
2414 [struct utmp ut;  ut.ut_type = 0;],
2415 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2416 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2417     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2418 fi
2419
2420 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2421 AC_TRY_COMPILE([#include <sys/types.h>
2422 #include <utmp.h>],
2423 [struct utmp ut;  ut.ut_pid = 0;],
2424 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2425 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2426     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2427 fi
2428
2429 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2430 AC_TRY_COMPILE([#include <sys/types.h>
2431 #include <utmp.h>],
2432 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2433 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2434 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2435     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2436 fi
2437
2438 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2439 AC_TRY_COMPILE([#include <sys/types.h>
2440 #include <utmp.h>],
2441 [struct utmp ut;  ut.ut_addr = 0;],
2442 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2443 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2444     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2445 fi
2446
2447 if test x$ac_cv_func_pututline = xyes ; then
2448   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2449   AC_TRY_COMPILE([#include <sys/types.h>
2450 #include <utmp.h>],
2451   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2452   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2453   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2454       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2455   fi
2456 fi
2457
2458 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2459 AC_TRY_COMPILE([#include <sys/types.h>
2460 #include <utmpx.h>],
2461 [struct utmpx ux;  ux.ut_syslen = 0;],
2462 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2463 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2464     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2465 fi
2466
2467 fi
2468 # end utmp details
2469
2470
2471 ICONV_LOCATION=standard
2472 LOOK_DIRS="/usr /usr/local /sw /opt"
2473 AC_ARG_WITH(libiconv,
2474 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
2475 [
2476   if test "$withval" = "no" ; then
2477     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2478   else
2479      if test "$withval" != "yes" ; then
2480         ICONV_PATH_SPEC=yes
2481         LOOK_DIRS="$withval"
2482      fi
2483   fi
2484 ])
2485
2486 for i in $LOOK_DIRS ; do
2487     save_LIBS=$LIBS
2488     save_LDFLAGS=$LDFLAGS
2489     save_CPPFLAGS=$CPPFLAGS
2490     ICONV_FOUND="no"
2491     unset libext
2492     CPPFLAGS="$CPPFLAGS -I$i/include"
2493 dnl This is here to handle -withval stuff for --with-libiconv
2494 dnl Perhaps we should always add a -L
2495
2496 dnl Check lib and lib32 library variants to cater for IRIX ABI-specific
2497 dnl installation paths. This gets a little tricky since we might have iconv
2498 dnl in both libiconv and in libc. In this case the jm_ICONV test will always
2499 dnl succeed when the header is found. To counter this, make sure the
2500 dnl library directory is there and check the ABI directory first (which
2501 dnl should be harmless on other systems.
2502 dnl For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2503     for l in "lib32" "lib" "lib/hpux32"; do
2504         if test -d "$i/$l" ; then
2505                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2506         LIBS=
2507         export LDFLAGS LIBS CPPFLAGS
2508 dnl Try to find iconv(3)
2509                 jm_ICONV($i/$l)
2510                 if test x"$ICONV_FOUND" = "xyes" ; then
2511             libext="$l"
2512             break;
2513         fi
2514         fi
2515     done
2516
2517     if test x"$ICONV_FOUND" = "xyes" ; then
2518         LDFLAGS=$save_LDFLAGS
2519         LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2520         CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2521         LIBS="$save_LIBS"
2522         ICONV_LOCATION=$i
2523         export LDFLAGS LIBS CPPFLAGS
2524 dnl Now, check for a working iconv ... we want to do it here because
2525 dnl there might be a working iconv further down the list of LOOK_DIRS
2526
2527         ############
2528         # check for iconv in libc
2529         ic_save_LIBS="$LIBS"
2530         if test x"$ICONV_PATH_SPEC" = "xyes" ; then
2531            LIBS="$LIBS -L$ICONV_LOCATION/$libext"
2532         fi
2533         if test x"$jm_cv_lib_iconv" != x; then
2534            LIBS="$LIBS -l$jm_cv_lib_iconv"
2535         fi
2536 dnl        AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[
2537         default_dos_charset=no
2538         default_display_charset=no
2539         default_unix_charset=no
2540
2541         # check for default dos charset name
2542         for j in CP850 IBM850 ; do
2543             rjs_CHARSET($j)
2544             if test x"$ICONV_CHARSET" = x"$j"; then
2545                 default_dos_charset="\"$j\""
2546                 break
2547             fi
2548         done
2549         # check for default display charset name
2550         for j in ASCII 646 ; do
2551             rjs_CHARSET($j)
2552             if test x"$ICONV_CHARSET" = x"$j"; then
2553                 default_display_charset="\"$j\""
2554                 break
2555             fi
2556         done
2557         # check for default unix charset name
2558         for j in UTF-8 UTF8 ; do
2559             rjs_CHARSET($j)
2560             if test x"$ICONV_CHARSET" = x"$j"; then
2561                 default_unix_charset="\"$j\""
2562                 break
2563             fi
2564         done
2565         
2566         if test "$default_dos_charset" != "no" -a \
2567                 "$default_dos_charset" != "cross" -a \
2568                 "$default_display_charset" != "no" -a \
2569                 "$default_display_charset" != "cross" -a \
2570                 "$default_unix_charset" != "no" -a \
2571                 "$default_unix_charset" != "cross"
2572         then
2573                 samba_cv_HAVE_NATIVE_ICONV=yes
2574         else if test "$default_dos_charset" = "cross" -o \
2575                      "$default_display_charset" = "cross" -o \
2576                      "$default_unix_charset" = "cross"
2577         then
2578                 samba_cv_HAVE_NATIVE_ICONV=cross
2579         else
2580                 samba_cv_HAVE_NATIVE_ICONV=no
2581         fi
2582         fi
2583 dnl ])
2584
2585         LIBS="$ic_save_LIBS"
2586         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
2587            CPPFLAGS=$save_CPPFLAGS
2588            LDFLAGS=$save_LDFLAGS
2589            LIBS=$save_LIBS
2590            if test x"$jm_cv_lib_iconv" != x; then
2591               LIBS="$LIBS -l$jm_cv_lib_iconv"
2592            fi
2593            dnl Add the flags we need to CPPFLAGS and LDFLAGS
2594            CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2595            LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2596            export CPPFLAGS
2597            AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2598            AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2599            AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2600            AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2601            break
2602         fi
2603 dnl We didn't find a working iconv, so keep going
2604     fi
2605 dnl We only need to clean these up here for the next pass through the loop
2606     CPPFLAGS=$save_CPPFLAGS
2607     LDFLAGS=$save_LDFLAGS
2608     LIBS=$save_LIBS
2609     export LDFLAGS LIBS CPPFLAGS
2610 done
2611 unset libext
2612
2613
2614 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2615     AC_MSG_WARN([Sufficient support for iconv function was not found.
2616     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2617    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2618    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2619    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2620 fi
2621
2622
2623 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2624 AC_TRY_RUN([
2625 #include <sys/types.h>
2626 #include <fcntl.h>
2627 #ifndef F_GETLEASE
2628 #define F_GETLEASE      1025
2629 #endif
2630 int main() {
2631        int fd = open("/dev/null", O_RDONLY);
2632        return fcntl(fd, F_GETLEASE, 0) == -1;
2633 }
2634 ],
2635 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2636 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2637     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2638 fi
2639
2640 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2641 AC_TRY_RUN([
2642 #include <sys/types.h>
2643 #include <fcntl.h>
2644 #include <signal.h>
2645 #ifndef F_NOTIFY
2646 #define F_NOTIFY 1026
2647 #endif
2648 int main() {
2649         return fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0;
2650 }
2651 ],
2652 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2653 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2654     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2655 fi
2656
2657 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2658 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h)
2659 AC_CHECK_FUNC(inotify_init)
2660 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2661 ],
2662 samba_cv_HAVE_INOTIFY=yes,
2663 samba_cv_HAVE_INOTIFY=no,
2664 samba_cv_HAVE_INOTIFY=cross)
2665
2666 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2667     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2668 fi
2669
2670 #################################################
2671 # Check if FAM notifications are available. For FAM info, see
2672 #       http://oss.sgi.com/projects/fam/
2673 #       http://savannah.nongnu.org/projects/fam/
2674 AC_ARG_ENABLE(fam,
2675 [  --enable-fam            Turn on FAM support (default=auto)])
2676
2677 if test x$enable_fam != xno; then
2678     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2679     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2680         # On IRIX, libfam requires libC, but other FAM implementations
2681         # might not need it.
2682         AC_CHECK_LIB(fam, FAMOpen2,
2683             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"],
2684             [samba_cv_HAVE_LIBFAM=no])
2685
2686         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2687             samba_fam_xtra=-lC
2688             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2689                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"],
2690                 [samba_cv_HAVE_LIBFAM=no])
2691             unset samba_fam_xtra
2692         fi
2693     fi
2694
2695     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2696         default_shared_modules="$default_shared_modules vfs_notify_fam"
2697         AC_TRY_COMPILE([#include <fam.h>],
2698                     [FAMCodes code = FAMChanged;],
2699                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2700                         [Whether fam.h contains a typedef for enum FAMCodes]),
2701                     [])
2702     fi
2703
2704     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2705         AC_MSG_ERROR(FAM support requested but FAM library not available )
2706     fi
2707 fi
2708
2709 AC_SUBST(SMB_FAM_LIBS)
2710
2711 #################################################
2712 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2713
2714 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2715
2716 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2717 AC_TRY_RUN([
2718 #include <sys/types.h>
2719 #include <fcntl.h>
2720 #include <signal.h>
2721 #include <sys/file.h>
2722 #ifndef LOCK_MAND
2723 #define LOCK_MAND       32
2724 #define LOCK_READ       64
2725 #endif
2726 int main() {
2727         return flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0;
2728 }
2729 ],
2730 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2731 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2732     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2733 fi
2734
2735
2736 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2737 AC_TRY_COMPILE([#include <sys/types.h>
2738 #include <fcntl.h>],
2739 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2740 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2741 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2742     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2743 fi
2744
2745 #################################################
2746 # Check for POSIX capability support
2747
2748 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2749     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2750     [], [])
2751
2752 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2753
2754     ac_save_LIBS=$LIBS
2755     AC_LIBTESTFUNC(cap, cap_get_proc)
2756
2757     AC_CACHE_CHECK([for POSIX capabilities],
2758             samba_cv_HAVE_POSIX_CAPABILITIES,
2759             [
2760                 AC_TRY_RUN([
2761 #include <sys/types.h>
2762 #include <sys/capability.h>
2763 int main() {
2764  cap_t cap;
2765  cap_value_t vals[1];
2766  if (!(cap = cap_get_proc()))
2767    return 1;
2768  vals[0] = CAP_CHOWN;
2769  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2770  cap_set_proc(cap);
2771  return 0;
2772 }],
2773                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2774                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2775                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2776             ])
2777
2778 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2779     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2780             [Whether POSIX capabilities are available])
2781 else
2782     LIBS=$ac_save_LIBS
2783 fi
2784
2785 fi
2786
2787 #
2788 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2789 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2790 #
2791
2792 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2793 AC_TRY_COMPILE([#include <sys/types.h>
2794 #if defined(HAVE_RPC_RPC_H)
2795 #include <rpc/rpc.h>
2796 #endif],
2797 [int16 testvar;],
2798 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2799 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2800     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2801 fi
2802
2803 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2804 AC_TRY_COMPILE([#include <sys/types.h>
2805 #if defined(HAVE_RPC_RPC_H)
2806 #include <rpc/rpc.h>
2807 #endif],
2808 [uint16 testvar;],
2809 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2810 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2811     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2812 fi
2813
2814 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2815 AC_TRY_COMPILE([#include <sys/types.h>
2816 #if defined(HAVE_RPC_RPC_H)
2817 #include <rpc/rpc.h>
2818 #endif],
2819 [int32 testvar;],
2820 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2821 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2822     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2823 fi
2824
2825 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2826 AC_TRY_COMPILE([#include <sys/types.h>
2827 #if defined(HAVE_RPC_RPC_H)
2828 #include <rpc/rpc.h>
2829 #endif],
2830 [uint32 testvar;],
2831 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2832 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2833     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2834 fi
2835
2836 dnl
2837 dnl Some systems (SCO) have a problem including
2838 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2839 dnl as a #define in <prot.h> and as part of an enum
2840 dnl in <rpc/rpc.h>.
2841 dnl
2842
2843 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2844 AC_TRY_COMPILE([#include <sys/types.h>
2845 #ifdef HAVE_SYS_SECURITY_H
2846 #include <sys/security.h>
2847 #include <prot.h>
2848 #endif  /* HAVE_SYS_SECURITY_H */
2849 #if defined(HAVE_RPC_RPC_H)
2850 #include <rpc/rpc.h>
2851 #endif],
2852 [int testvar;],
2853 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2854 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2855     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2856 fi
2857
2858 AC_MSG_CHECKING([for test routines])
2859 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2860            AC_MSG_RESULT(yes),
2861            AC_MSG_ERROR([cant find test code. Aborting config]),
2862            AC_MSG_WARN([cannot run when cross-compiling]))
2863
2864 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2865 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2866            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2867 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2868     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2869 fi
2870
2871 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
2872 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
2873            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
2874            samba_cv_HAVE_WORKING_AF_LOCAL=no,
2875            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
2876 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
2877 then
2878     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
2879 fi
2880
2881 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2882 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2883            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2884 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2885     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2886 fi
2887
2888 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
2889 AC_TRY_RUN([#include <stdlib.h>
2890 #include <sys/types.h>
2891 #include <sys/stat.h>
2892 #include <unistd.h>
2893 int main() {
2894   struct stat st;
2895   char tpl[20]="/tmp/test.XXXXXX";
2896   int fd = mkstemp(tpl);
2897   if (fd == -1) return 1;
2898   unlink(tpl);
2899   if (fstat(fd, &st) != 0) return 1;
2900   if ((st.st_mode & 0777) != 0600) return 1;
2901   return 0;
2902 }],
2903 samba_cv_HAVE_SECURE_MKSTEMP=yes,
2904 samba_cv_HAVE_SECURE_MKSTEMP=no,
2905 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
2906 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
2907     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
2908 fi
2909
2910 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
2911         AC_TRY_RUN([
2912 #include "${srcdir-.}/lib/replace/test/os2_delete.c"
2913 int main(void) {
2914     return test_readdir_os2_delete();
2915 }
2916 ],
2917                 [samba_cv_HAVE_BROKEN_READDIR=no],
2918                         [samba_cv_HAVE_BROKEN_READDIR=yes],
2919                         [samba_cv_HAVE_BROKEN_READDIR="assuming not"])])
2920
2921 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
2922 AC_CACHE_CHECK([for replacing readdir],samba_cv_REPLACE_READDIR,[
2923         AC_TRY_RUN([
2924 #include "${srcdir-.}/lib/repdir.c"
2925 #include "${srcdir-.}/lib/replace/test/os2_delete.c"
2926 int main(void) {
2927     return test_readdir_os2_delete();
2928 ],
2929         samba_cv_REPLACE_READDIR=yes,samba_cv_REPLACE_READDIR=no)])
2930 fi
2931
2932 if test x"$samba_cv_REPLACE_READDIR" = x"yes"; then
2933         AC_DEFINE(REPLACE_READDIR,1,[replace readdir])
2934 fi
2935
2936 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2937 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2938 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2939 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2940 AC_CHECK_FUNCS(getpagesize)
2941
2942 ##################
2943 # look for a method of finding the list of network interfaces
2944 iface=no;
2945 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
2946 SAVE_CPPFLAGS="$CPPFLAGS"
2947 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2948 AC_TRY_RUN([
2949 #define HAVE_IFACE_AIX 1
2950 #define AUTOCONF_TEST 1
2951 #undef _XOPEN_SOURCE_EXTENDED
2952 #include "${srcdir-.}/lib/interfaces.c"],
2953            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
2954 CPPFLAGS="$SAVE_CPPFLAGS"
2955 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
2956     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
2957 fi
2958
2959 if test $iface = no; then
2960 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
2961 SAVE_CPPFLAGS="$CPPFLAGS"
2962 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2963 AC_TRY_RUN([
2964 #define HAVE_IFACE_IFCONF 1
2965 #define AUTOCONF_TEST 1
2966 #include "${srcdir-.}/lib/interfaces.c"],
2967            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
2968 CPPFLAGS="$SAVE_CPPFLAGS"
2969 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
2970     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
2971 fi
2972 fi
2973
2974 if test $iface = no; then
2975 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
2976 SAVE_CPPFLAGS="$CPPFLAGS"
2977 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2978 AC_TRY_RUN([
2979 #define HAVE_IFACE_IFREQ 1
2980 #define AUTOCONF_TEST 1
2981 #include "${srcdir-.}/lib/interfaces.c"],
2982            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
2983 CPPFLAGS="$SAVE_CPPFLAGS"
2984 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
2985     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
2986 fi
2987 fi
2988
2989
2990 ################################################
2991 # look for a method of setting the effective uid
2992 seteuid=no;
2993 if test $seteuid = no; then
2994 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2995 AC_TRY_RUN([
2996 #define AUTOCONF_TEST 1
2997 #define USE_SETRESUID 1
2998 #include "confdefs.h"
2999 #include "${srcdir-.}/lib/util_sec.c"],
3000            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
3001 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
3002     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
3003 fi
3004 fi
3005
3006
3007 if test $seteuid = no; then
3008 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
3009 AC_TRY_RUN([
3010 #define AUTOCONF_TEST 1
3011 #define USE_SETREUID 1
3012 #include "confdefs.h"
3013 #include "${srcdir-.}/lib/util_sec.c"],
3014            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
3015 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
3016     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
3017 fi
3018 fi
3019
3020 if test $seteuid = no; then
3021 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
3022 AC_TRY_RUN([
3023 #define AUTOCONF_TEST 1
3024 #define USE_SETEUID 1
3025 #include "confdefs.h"
3026 #include "${srcdir-.}/lib/util_sec.c"],
3027            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
3028 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
3029     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
3030 fi
3031 fi
3032
3033 if test $seteuid = no; then
3034 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
3035 AC_TRY_RUN([
3036 #define AUTOCONF_TEST 1
3037 #define USE_SETUIDX 1
3038 #include "confdefs.h"
3039 #include "${srcdir-.}/lib/util_sec.c"],
3040            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
3041 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
3042     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
3043 fi
3044 fi
3045
3046
3047 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
3048 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
3049            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
3050 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
3051     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
3052 fi
3053
3054 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
3055 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
3056            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
3057 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
3058     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
3059 fi
3060
3061 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
3062 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
3063            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
3064 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
3065     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
3066
3067 else
3068
3069 dnl
3070 dnl Don't check for 64 bit fcntl locking if we know that the
3071 dnl glibc2.1 broken check has succeeded.
3072 dnl
3073
3074   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
3075   AC_TRY_RUN([
3076 #if defined(HAVE_UNISTD_H)
3077 #include <unistd.h>
3078 #endif
3079 #include <stdio.h>
3080 #include <stdlib.h>
3081
3082 #ifdef HAVE_FCNTL_H
3083 #include <fcntl.h>
3084 #endif
3085
3086 #ifdef HAVE_SYS_FCNTL_H
3087 #include <sys/fcntl.h>
3088 #endif
3089 int main() { struct flock64 fl64;
3090 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
3091 return 0;
3092 #else
3093 return 1;
3094 #endif
3095 }],
3096        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
3097
3098   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
3099       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
3100   fi
3101 fi
3102
3103 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
3104 AC_TRY_COMPILE([#include <sys/types.h>
3105 #include <sys/stat.h>
3106 #include <unistd.h>],
3107 [struct stat st;  st.st_blocks = 0;],
3108 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
3109 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
3110     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
3111 fi
3112
3113 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
3114 AC_TRY_COMPILE([#include <sys/types.h>
3115 #include <sys/stat.h>
3116 #include <unistd.h>],
3117 [struct stat st;  st.st_blksize = 0;],
3118 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
3119 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
3120     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
3121 fi
3122
3123 AC_CACHE_CHECK([for st_flags in struct stat],
3124         samba_cv_HAVE_STAT_ST_FLAGS,
3125         [
3126             AC_TRY_COMPILE([#include <sys/types.h>
3127 #include <sys/stat.h>
3128 #include <unistd.h>],
3129             [struct stat st;  st.st_flags = 0;],
3130             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3131             samba_cv_HAVE_STAT_ST_FLAGS=no,
3132             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3133         ])
3134
3135 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3136     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3137                 [Whether the stat struct has a st_flags member])
3138 fi
3139
3140 case "$host_os" in
3141 *linux*)
3142 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
3143 AC_TRY_COMPILE([
3144 #ifdef HAVE_SYS_VFS_H
3145 #include <sys/vfs.h>
3146 #endif
3147 #ifdef HAVE_SYS_CAPABILITY_H
3148 #include <sys/capability.h>
3149 #endif
3150 ],[int i;],
3151    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
3152 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
3153    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
3154 fi
3155 ;;
3156 esac
3157
3158 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3159 AC_TRY_COMPILE([
3160 #include <sys/types.h>
3161 #include <sys/acl.h>
3162 #if defined(HAVE_RPCSVC_NIS_H)
3163 #include <rpcsvc/nis.h>
3164 #endif],
3165 [int i;],
3166 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3167 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3168         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3169 fi
3170
3171 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3172 AC_TRY_RUN([
3173 #include <stdio.h>
3174 #include <stdlib.h>
3175 #include <limits.h>
3176 int main() {
3177         char *newpath = realpath("/tmp", NULL);
3178         return (newpath != NULL) ? 0 : 1;
3179 }
3180 ],
3181 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3182 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3183     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3184 fi
3185
3186 #################################################
3187 # check for AFS clear-text auth support
3188 samba_cv_WITH_AFS=no
3189 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3190 AC_ARG_WITH(afs,
3191 [  --with-afs              Include AFS clear-text auth support (default=no) ],
3192 [ case "$withval" in
3193   yes|auto)
3194     AC_MSG_RESULT($withval)
3195     samba_cv_WITH_AFS=$withval
3196     ;;
3197   *)
3198     AC_MSG_RESULT(no)
3199     ;;
3200   esac ],
3201   AC_MSG_RESULT(no)
3202 )
3203
3204 ####################################################
3205 # check for Linux-specific AFS fake-kaserver support
3206 samba_cv_WITH_FAKE_KASERVER=no
3207 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3208 AC_ARG_WITH(fake-kaserver,
3209 [  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
3210 [ case "$withval" in
3211   yes|auto)
3212     AC_MSG_RESULT($withval)
3213     samba_cv_WITH_FAKE_KASERVER=$withval
3214     ;;
3215   *)
3216     AC_MSG_RESULT(no)
3217     ;;
3218   esac ],
3219   AC_MSG_RESULT(no)
3220 )
3221
3222 #################################################
3223 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3224 if test x"$samba_cv_WITH_AFS" != x"no" ||
3225    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3226
3227     # see if this box has the afs-headers in /usr/include/afs
3228     AC_MSG_CHECKING(for /usr/include/afs)
3229     if test -d /usr/include/afs; then
3230           CFLAGS="$CFLAGS -I/usr/include/afs"
3231           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
3232           AC_MSG_RESULT(yes)
3233     else
3234       AC_MSG_RESULT(no)
3235     fi
3236
3237     # check for afs.h
3238     have_afs_headers=no
3239     AC_CHECK_HEADERS(afs.h afs/afs.h)
3240     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3241         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3242            test x"$samba_cv_WITH_AFS" = x"auto"; then
3243                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3244         else
3245                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3246         fi
3247     else
3248         have_afs_headers=yes
3249     fi
3250 fi
3251
3252 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3253     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3254 fi
3255
3256 #################################################
3257 # check whether to compile AFS/NT ACL mapping module
3258 samba_cv_WITH_VFS_AFSACL=no
3259 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3260 AC_ARG_WITH(vfs-afsacl,
3261 [  --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no) ],
3262 [ case "$withval" in
3263   yes|auto)
3264     AC_MSG_RESULT($withval)
3265     samba_cv_WITH_VFS_AFSACL=yes
3266     ;;
3267   *)
3268     AC_MSG_RESULT(no)
3269     ;;
3270   esac ],
3271   AC_MSG_RESULT(no)
3272 )
3273
3274 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3275    default_shared_modules="$default_shared_modules vfs_afsacl"
3276 fi
3277         
3278 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3279     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3280 fi
3281
3282 #################################################
3283 # check for the DFS clear-text auth system
3284 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3285 AC_ARG_WITH(dfs,
3286 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
3287 [ case "$withval" in
3288   yes)
3289     AC_MSG_RESULT(yes)
3290     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3291     ;;
3292   *)
3293     AC_MSG_RESULT(no)
3294     ;;
3295   esac ],
3296   AC_MSG_RESULT(no)
3297 )
3298
3299 ########################################################
3300 # Compile with LDAP support?
3301
3302 with_ldap_support=auto
3303 AC_MSG_CHECKING([for LDAP support])
3304
3305 AC_ARG_WITH(ldap,
3306 [  --with-ldap             LDAP support (default yes)],
3307 [ case "$withval" in
3308     yes|no)
3309         with_ldap_support=$withval
3310         ;;
3311   esac ])
3312
3313 AC_MSG_RESULT($with_ldap_support)
3314
3315 SMBLDAP=""
3316 AC_SUBST(SMBLDAP)
3317 SMBLDAPUTIL=""
3318 AC_SUBST(SMBLDAPUTIL)
3319 LDBLDAP=""
3320 AC_SUBST(LDBLDAP)
3321
3322 if test x"$with_ldap_support" != x"no"; then
3323
3324   ##################################################################
3325   # first test for ldap.h and lber.h
3326   # (ldap.h is required for this test)
3327   AC_CHECK_HEADERS(ldap.h lber.h)
3328
3329   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3330         if test x"$with_ldap_support" = x"yes"; then
3331          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3332         else
3333          AC_MSG_WARN(ldap.h is needed for LDAP support)
3334         fi
3335         
3336         with_ldap_support=no
3337   fi
3338
3339   ##################################################################
3340   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3341   # unsigned int in include/includes.h
3342   case $host_os in
3343         *hpux*)
3344          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3345          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3346         with_ldap_support=yes
3347         ;;
3348         *)
3349         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3350         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3351                 if test x"$with_ldap_support" = x"yes"; then
3352                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3353                 else
3354                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3355                 fi
3356                 with_ldap_support=no
3357         fi
3358         ;;
3359   esac
3360 fi
3361
3362 if test x"$with_ldap_support" != x"no"; then
3363   ac_save_LIBS=$LIBS
3364
3365   ##################################################################
3366   # we might need the lber lib on some systems. To avoid link errors
3367   # this test must be before the libldap test
3368   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3369
3370   ########################################################
3371   # now see if we can find the ldap libs in standard paths
3372   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3373
3374   ########################################################
3375   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3376   # Check found in pam_ldap 145.
3377   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3378
3379   LIBS="$LIBS $LDAP_LIBS"
3380   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3381     AC_TRY_COMPILE([
3382         #include <lber.h>
3383         #include <ldap.h>],
3384         [ldap_set_rebind_proc(0, 0, 0);],
3385         [smb_ldap_cv_ldap_set_rebind_proc=3],
3386         [smb_ldap_cv_ldap_set_rebind_proc=2]
3387     )
3388   ])
3389
3390   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3391
3392   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3393
3394   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3395     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3396     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3397     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3398     default_shared_modules="$default_shared_modules";
3399     SMBLDAP="lib/smbldap.o"
3400     SMBLDAPUTIL="lib/smbldap_util.o"
3401     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3402       AC_MSG_WARN(Disabling ldb_ldap support (requires ldap_initialize))
3403     else
3404       AC_DEFINE(HAVE_LDB_LDAP,1,[Whether ldb_ldap is available])
3405       LDBLDAP="lib/ldb/ldb_ldap/ldb_ldap.o"
3406     fi
3407     with_ldap_support=yes
3408     AC_MSG_CHECKING(whether LDAP support is used)
3409     AC_MSG_RESULT(yes)
3410   else
3411     if test x"$with_ldap_support" = x"yes"; then
3412         AC_MSG_ERROR(libldap is needed for LDAP support)
3413     else
3414         AC_MSG_WARN(libldap is needed for LDAP support)
3415     fi
3416
3417     LDAP_LIBS=""
3418     with_ldap_support=no
3419   fi
3420   LIBS=$ac_save_LIBS
3421 fi
3422
3423
3424 #################################################
3425 # active directory support
3426
3427 with_ads_support=auto
3428 AC_MSG_CHECKING([for Active Directory and krb5 support])
3429
3430 AC_ARG_WITH(ads,
3431 [  --with-ads              Active Directory support (default auto)],
3432 [ case "$withval" in
3433     yes|no)
3434         with_ads_support="$withval"
3435         ;;
3436   esac ])
3437
3438 AC_MSG_RESULT($with_ads_support)
3439
3440 FOUND_KRB5=no
3441 KRB5_LIBS=""
3442
3443 if test x"$with_ldap_support" != x"yes"; then
3444
3445     if test x"$with_ads_support" = x"yes"; then
3446         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3447     elif test x"$with_ads_support" = x"auto"; then
3448         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3449         with_ads_support=no
3450     fi
3451
3452 else
3453
3454     # Check to see whether there is enough LDAP functionality to be able
3455     # to build AD support.
3456
3457 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3458 case "$host_os" in
3459         *hpux*)
3460     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3461
3462     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3463         if test x"$with_ads_support" = x"yes"; then
3464             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3465         elif test x"$with_ads_support" = x"auto"; then
3466             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3467             with_ads_support=no
3468         fi
3469     fi
3470     ;;
3471         *)
3472     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3473
3474     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3475         if test x"$with_ads_support" = x"yes"; then
3476             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3477         elif test x"$with_ads_support" = x"auto"; then
3478             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3479             with_ads_support=no
3480         fi
3481     fi
3482     ;;
3483 esac
3484
3485
3486     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3487
3488     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3489         if test x"$with_ads_support" = x"yes"; then
3490             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3491         elif test x"$with_ads_support" = x"auto"; then
3492             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3493             with_ads_support=no
3494         fi
3495     fi
3496
3497 fi
3498
3499 if test x"$with_ads_support" != x"no"; then
3500
3501   # Do no harm to the values of CFLAGS and LIBS while testing for
3502   # Kerberos support.
3503
3504   if test x$FOUND_KRB5 = x"no"; then
3505     #################################################
3506     # check for location of Kerberos 5 install
3507     AC_MSG_CHECKING(for kerberos 5 install path)
3508     AC_ARG_WITH(krb5,
3509     [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
3510     [ case "$withval" in
3511       no)
3512         AC_MSG_RESULT(no krb5-path given)
3513         ;;
3514       yes)
3515         AC_MSG_RESULT(/usr)
3516         FOUND_KRB5=yes
3517         ;;
3518       *)
3519         AC_MSG_RESULT($withval)
3520         KRB5_CFLAGS="-I$withval/include"
3521         KRB5_CPPFLAGS="-I$withval/include"
3522         KRB5_LDFLAGS="-L$withval/lib"
3523         FOUND_KRB5=yes
3524         if test -x "$withval/bin/krb5-config"; then
3525                 KRB5CONFIG=$withval/bin/krb5-config
3526         fi
3527         ;;
3528       esac ],
3529       AC_MSG_RESULT(no krb5-path given)
3530     )
3531   fi
3532
3533   #################################################
3534   # check for krb5-config from recent MIT and Heimdal kerberos 5
3535   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3536   AC_MSG_CHECKING(for working krb5-config)
3537   if test -x "$KRB5CONFIG"; then
3538     ac_save_CFLAGS=$CFLAGS
3539     CFLAGS="";export CFLAGS
3540     ac_save_LDFLAGS=$LDFLAGS
3541     LDFLAGS="";export LDFLAGS
3542     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3543     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3544     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3545     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3546     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3547     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3548     FOUND_KRB5=yes
3549     AC_MSG_RESULT(yes)
3550   else
3551     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3552   fi
3553
3554   if test x$FOUND_KRB5 = x"no"; then
3555     #################################################
3556     # see if this box has the SuSE location for the heimdal krb implementation
3557     AC_MSG_CHECKING(for /usr/include/heimdal)
3558     if test -d /usr/include/heimdal; then
3559       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3560           KRB5_CFLAGS="-I/usr/include/heimdal"
3561           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3562           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3563           AC_MSG_RESULT(yes)
3564       else
3565           KRB5_CFLAGS="-I/usr/include/heimdal"
3566           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3567           AC_MSG_RESULT(yes)
3568       fi
3569     else
3570       AC_MSG_RESULT(no)
3571     fi
3572   fi
3573
3574   if test x$FOUND_KRB5 = x"no"; then
3575     #################################################
3576     # see if this box has the RedHat location for kerberos
3577     AC_MSG_CHECKING(for /usr/kerberos)
3578     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3579       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3580       KRB5_CFLAGS="-I/usr/kerberos/include"
3581       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3582       AC_MSG_RESULT(yes)
3583     else
3584       AC_MSG_RESULT(no)
3585     fi
3586   fi
3587
3588   ac_save_CFLAGS=$CFLAGS
3589   ac_save_CPPFLAGS=$CPPFLAGS
3590   ac_save_LDFLAGS=$LDFLAGS
3591
3592   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3593   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3594   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3595
3596   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3597
3598   # now check for krb5.h. Some systems have the libraries without the headers!
3599   # note that this check is done here to allow for different kerberos
3600   # include paths
3601   AC_CHECK_HEADERS(krb5.h)
3602
3603   if test x"$ac_cv_header_krb5_h" = x"no"; then
3604
3605     # Give a warning if AD support was not explicitly requested,
3606     # i.e with_ads_support = auto, otherwise die with an error.
3607
3608     if test x"$with_ads_support" = x"yes"; then
3609       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3610     else
3611       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3612     fi
3613
3614     # Turn off AD support and restore CFLAGS and LIBS variables
3615
3616     with_ads_support="no"
3617
3618     CFLAGS=$ac_save_CFLAGS
3619     CPPFLAGS=$ac_save_CPPFLAGS
3620     LDFLAGS=$ac_save_LDFLAGS
3621   fi
3622   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3623 fi
3624
3625 # Now we have determined whether we really want ADS support
3626 use_ads=no
3627 if test x"$with_ads_support" != x"no"; then
3628   use_ads=yes
3629   have_gssapi=no
3630   ac_save_LIBS=$LIBS
3631
3632   # now check for gssapi headers.  This is also done here to allow for
3633   # different kerberos include paths
3634   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3635
3636   ##################################################################
3637   # we might need the k5crypto and com_err libraries on some systems
3638   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3639   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3640
3641   # Heimdal checks.
3642   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3643   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3644   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3645
3646   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3647   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3648
3649   ########################################################
3650   # now see if we can find the krb5 libs in standard paths
3651   # or as specified above
3652   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3653   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3654
3655   ########################################################
3656   # now see if we can find the gssapi libs in standard paths
3657   if test x"$have_gssapi" != x"yes"; then
3658      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3659   fi
3660
3661   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3662   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3663   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3664   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3665   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3666   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3667   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3668   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3669   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3670   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3671   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3672   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3673   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3674   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3675   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3676   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3677   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3678   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3679   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3680   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3681   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3682   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3683   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3684   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3685   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3686   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3687   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3688   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3689   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3690   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3691   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3692   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3693   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3694   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3695   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3696   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3697   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3698   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3699   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3700   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3701   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3702
3703   LIBS="$KRB5_LIBS $LIBS"
3704
3705   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3706         smb_krb5_ticket_has_keyinfo,
3707         [
3708             AC_TRY_COMPILE(
3709             [
3710                 #include <krb5.h>
3711             ],
3712             [
3713                 krb5_ticket ticket;
3714                 krb5_kvno kvno;
3715                 krb5_enctype enctype;
3716
3717                 enctype = ticket.enc_part.enctype;
3718                 kvno = ticket.enc_part.kvno;
3719             ],
3720             [ smb_krb5_ticket_has_keyinfo=yes ],
3721             [ smb_krb5_ticket_has_keyinfo=no ])
3722         ])
3723
3724   if test x"$smb_krb5_ticket_has_keyinfo" = x"yes" ; then
3725         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3726             [Whether the krb5_ticket structure contains the kvno and enctype])
3727   fi
3728
3729   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3730           smb_krb5_creds_opt_free_context,
3731           [
3732                 AC_TRY_COMPILE([
3733                     #include <krb5.h>],
3734                     [
3735                         krb5_context ctx;
3736                         krb5_get_init_creds_opt *opt = NULL;
3737                         krb5_get_init_creds_opt_free(ctx, opt);
3738                     ],
3739                     [smb_krb5_creds_opt_free_context=yes],
3740                     [smb_krb5_creds_opt_free_context=no]
3741                 )
3742           ])
3743
3744   if test x"$smb_krb5_creds_opt_free_context" = x"yes" ; then
3745         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3746             [Whether krb5_get_init_creds_opt_free takes a context argument])
3747   fi
3748
3749   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_verify_checksum, [
3750     AC_TRY_COMPILE([
3751         #include <krb5.h>],
3752         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3753         [smb_krb5_verify_checksum=7],
3754         [smb_krb5_verify_checksum=6],
3755     )
3756   ])
3757   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_verify_checksum, [Number of arguments to krb5_verify_checksum])
3758
3759   AC_CACHE_CHECK([for checksum in krb5_checksum],
3760                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3761     AC_TRY_COMPILE([#include <krb5.h>],
3762       [krb5_checksum cksum; cksum.checksum.length = 0;],
3763       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3764       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3765
3766   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3767     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3768                [Whether the krb5_checksum struct has a checksum property])
3769   fi
3770
3771   AC_CACHE_CHECK([for etype in EncryptedData],
3772                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3773     AC_TRY_COMPILE([#include <krb5.h>],
3774       [EncryptedData edata; edata.etype = 0;],
3775       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3776       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3777
3778   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3779     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3780                [Whether the EncryptedData struct has a etype property])
3781   fi
3782
3783   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3784                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3785     AC_TRY_COMPILE([#include <krb5.h>],
3786       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3787       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3788       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3789
3790   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3791     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3792                [Whether the krb5_ap_req struct has a ticket pointer])
3793   fi
3794
3795   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3796                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3797     AC_TRY_COMPILE([#include <krb5.h>],
3798       [krb5_error err; err.e_data = NULL;],
3799       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3800       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3801
3802   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3803     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3804                [Whether the krb5_error struct has a e_data pointer])
3805   fi
3806
3807   AC_CACHE_CHECK([for krb5_crypto type],
3808                 samba_cv_HAVE_KRB5_CRYPTO,[
3809     AC_TRY_COMPILE([#include <krb5.h>],
3810       [krb5_crypto crypto;],
3811       samba_cv_HAVE_KRB5_CRYPTO=yes,
3812       samba_cv_HAVE_KRB5_CRYPTO=no)])
3813
3814   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3815     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3816                [Whether the type krb5_crypto exists])
3817   fi
3818
3819   AC_CACHE_CHECK([for krb5_encrypt_block type],
3820                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3821     AC_TRY_COMPILE([#include <krb5.h>],
3822       [krb5_encrypt_block block;],
3823       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3824       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3825
3826   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3827     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3828                [Whether the type krb5_encrypt_block exists])
3829   fi
3830
3831   AC_CACHE_CHECK([for addrtype in krb5_address],
3832                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3833     AC_TRY_COMPILE([#include <krb5.h>],
3834       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3835       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3836       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3837
3838   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3839     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3840                [Whether the krb5_address struct has a addrtype property])
3841   fi
3842
3843   AC_CACHE_CHECK([for addr_type in krb5_address],
3844                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3845     AC_TRY_COMPILE([#include <krb5.h>],
3846       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3847       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3848       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3849
3850   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3851     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3852               [Whether the krb5_address struct has a addr_type property])
3853   fi
3854
3855   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3856                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3857                  [AC_TRY_COMPILE([#include <krb5.h>],
3858     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3859     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3860
3861   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3862     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3863               [Whether the krb5_ticket struct has a enc_part2 property])
3864   fi
3865
3866   AC_CACHE_CHECK([for keyblock in krb5_creds],
3867                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3868     AC_TRY_COMPILE([#include <krb5.h>],
3869       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3870       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3871       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3872
3873   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3874     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3875               [Whether the krb5_creds struct has a keyblock property])
3876   fi
3877
3878   AC_CACHE_CHECK([for session in krb5_creds],
3879                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3880     AC_TRY_COMPILE([#include <krb5.h>],
3881       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3882       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3883       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3884
3885   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3886     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3887               [Whether the krb5_creds struct has a session property])
3888   fi
3889
3890   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3891                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3892     AC_TRY_COMPILE([#include <krb5.h>],
3893       [krb5_keyblock key; key.keyvalue.data = NULL;],
3894       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3895       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3896
3897   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3898     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3899               [Whether the krb5_keyblock struct has a keyvalue property])
3900   fi
3901
3902   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3903                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3904     AC_TRY_COMPILE([#include <krb5.h>],
3905       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3906       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3907       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3908   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3909                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3910     AC_TRY_COMPILE([#include <krb5.h>],
3911       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3912       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3913       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3914 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3915 # w.r.t. arcfour and windows, so we must not enable it here
3916   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3917           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3918     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3919               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3920   fi
3921
3922   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3923                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3924     AC_TRY_COMPILE([#include <krb5.h>],
3925       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3926       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3927       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3928
3929   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3930     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3931               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3932   fi
3933
3934   AC_CACHE_CHECK([for KV5M_KEYTAB],
3935                  samba_cv_HAVE_KV5M_KEYTAB,[
3936     AC_TRY_COMPILE([#include <krb5.h>],
3937       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3938       samba_cv_HAVE_KV5M_KEYTAB=yes,
3939       samba_cv_HAVE_KV5M_KEYTAB=no)])
3940
3941   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3942       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3943              [Whether the KV5M_KEYTAB option is available])
3944   fi
3945
3946   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3947                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3948     AC_TRY_COMPILE([#include <krb5.h>],
3949       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3950       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3951       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3952
3953   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3954     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3955               [Whether KRB5_KU_OTHER_CKSUM is available])
3956   fi
3957
3958   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3959                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3960     AC_TRY_COMPILE([#include <krb5.h>],
3961       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3962       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3963       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3964
3965   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3966     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3967               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3968   fi
3969
3970   AC_CACHE_CHECK([for the krb5_princ_component macro],
3971                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3972     AC_TRY_LINK([#include <krb5.h>],
3973       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3974       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3975       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3976
3977   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3978     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3979                [Whether krb5_princ_component is available])
3980   fi
3981
3982   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3983                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3984     AC_TRY_COMPILE([#include <krb5.h>],
3985       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3986       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3987       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3988
3989   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3990     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3991               [Whether krb5_keytab_entry has key member])
3992   fi
3993
3994   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3995                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3996     AC_TRY_COMPILE([#include <krb5.h>],
3997       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3998       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3999       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
4000
4001   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
4002     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
4003               [Whether krb5_keytab_entry has keyblock member])
4004   fi
4005
4006   AC_CACHE_CHECK([for magic in krb5_address],
4007                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
4008     AC_TRY_COMPILE([#include <krb5.h>],
4009       [krb5_address addr; addr.magic = 0;],
4010       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
4011       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
4012
4013   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
4014     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
4015               [Whether the krb5_address struct has a magic property])
4016   fi
4017
4018   AC_CACHE_CHECK([for WRFILE: keytab support],
4019                 samba_cv_HAVE_WRFILE_KEYTAB,[
4020     AC_TRY_RUN([
4021 #include<krb5.h>
4022   int main()
4023   {
4024     krb5_context context;
4025     krb5_keytab keytab;
4026
4027     krb5_init_context(&context);
4028     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
4029   }],
4030   samba_cv_HAVE_WRFILE_KEYTAB=yes,
4031   samba_cv_HAVE_WRFILE_KEYTAB=no)])
4032
4033   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
4034       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
4035                [Whether the WRFILE:-keytab is supported])
4036   fi
4037
4038   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
4039                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
4040     AC_TRY_COMPILE([#include <krb5.h>],
4041     [
4042     krb5_context context;
4043     krb5_principal principal;
4044     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
4045     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
4046     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
4047
4048   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
4049     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
4050               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
4051   fi
4052
4053   AC_CACHE_CHECK([for krb5_addresses type],
4054                 samba_cv_HAVE_KRB5_ADDRESSES,[
4055     AC_TRY_COMPILE([#include <krb5.h>],
4056       [krb5_addresses addr;],
4057       samba_cv_HAVE_KRB5_ADDRESSES=yes,
4058       samba_cv_HAVE_KRB5_ADDRESSES=no)])
4059
4060   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
4061     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
4062                [Whether the type krb5_addresses type exists])
4063   fi
4064
4065   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
4066                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
4067     AC_TRY_COMPILE([#include <krb5.h>],
4068     [
4069     krb5_mk_error(0,0,0);],
4070     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
4071     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
4072
4073   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
4074     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
4075               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
4076   fi
4077
4078   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
4079     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
4080         smb_krb5_enctype_to_string_takes_krb5_context_arg,[
4081         AC_TRY_RUN_STRICT([
4082                 #include <krb5.h>
4083                 int main(void) {
4084                         krb5_context context = NULL;
4085                         char *str = NULL;
4086                         krb5_enctype_to_string(context, 1, &str);
4087                         if (str) free (str); 
4088                         return 0;
4089                 }
4090                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4091                 smb_krb5_enctype_to_string_takes_krb5_context_arg=yes,
4092                 smb_krb5_enctype_to_string_takes_krb5_context_arg=no)])
4093
4094     if test x"$smb_krb5_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4095       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4096                 [whether krb5_enctype_to_string takes krb5_context argument])
4097     fi
4098
4099     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4100         smb_krb5_enctype_to_string_takes_size_t_arg,[
4101         AC_TRY_RUN_STRICT([
4102                 #include <krb5.h>
4103                 int main(void) {
4104                         char buf[256];
4105                         krb5_enctype_to_string(1, buf, 256);
4106                         return 0;
4107                 }
4108                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4109                 smb_krb5_enctype_to_string_takes_size_t_arg=yes,
4110                 smb_krb5_enctype_to_string_takes_size_t_arg=no)])
4111
4112     if test x"$smb_krb5_enctype_to_string_takes_size_t_arg" = x"yes"; then
4113       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4114                 [whether krb5_enctype_to_string takes size_t argument])
4115     fi
4116   fi
4117
4118   #
4119   #
4120   # Now the decisions whether we can support krb5
4121   #
4122   # NOTE: all tests should be done before this block!
4123   #
4124   #
4125   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4126     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4127     use_ads=no
4128   fi
4129
4130   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
4131           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
4132   then
4133     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4134     use_ads=no
4135   fi
4136
4137   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4138           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4139   then
4140     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4141     use_ads=no
4142   fi
4143
4144   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4145           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4146   then
4147     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4148     use_ads=no
4149   fi
4150
4151   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
4152           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
4153   then
4154     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
4155     use_ads=no
4156   fi
4157
4158   if test x"$smb_krb5_ticket_has_keyinfo" != x"yes" ; then
4159
4160       # We only need the following functions if we can't get the enctype
4161       # and kvno out of the ticket directly (ie. on Heimdal).
4162
4163       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
4164       then
4165         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
4166         use_ads=no
4167       fi
4168
4169       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
4170       then
4171         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
4172         use_ads=no
4173       fi
4174
4175   fi
4176
4177   if test x"$use_ads" = x"yes"; then
4178     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4179     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4180     if test x"$have_gssapi" = x"yes"; then
4181       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
4182     fi
4183   else
4184     if test x"$with_ads_support" = x"yes"; then
4185         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4186     else
4187         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4188     fi
4189     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4190     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4191     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4192     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4193     KRB5_LIBS=""
4194     with_ads_support=no
4195   fi
4196   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4197   AC_MSG_RESULT([$use_ads])
4198
4199 LIBS="$ac_save_LIBS"
4200 fi
4201
4202 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4203 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4204
4205
4206 ########################################################
4207 # Compile with DNS Updates support?
4208
4209 with_dnsupdate_support=no
4210 AC_MSG_CHECKING([whether to enable DNS Updates support])
4211
4212 AC_ARG_WITH(dnsupdate,
4213 [  --with-dnsupdate        Enable DNS Updates support (default no)],
4214 [ case "$withval" in
4215     yes|no)
4216         with_dnsupdate_support=$withval
4217         ;;
4218   esac ])
4219
4220 AC_MSG_RESULT($with_dnsupdate_support)
4221
4222 if test x"$with_dnsupdate_support" != x"no"; then
4223
4224   ################################################################
4225   # first test for Active Directory support being enabled
4226   #if test x"$with_ads_support" = x"no"; then
4227   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
4228   #             with_dnsupdate_support=no
4229   #fi           
4230   ##################################################################
4231   # then test for uuid.h (necessary to generate unique DNS keynames
4232   # (uuid.h is required for this test)
4233   AC_CHECK_HEADERS(uuid/uuid.h)
4234
4235   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4236         if test x"$with_dnsupdate_support" = x"yes"; then
4237          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4238         else
4239          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4240         fi
4241         with_dnsupdate_support=no
4242   fi
4243 fi
4244
4245 if test x"$with_dnsupdate_support" != x"no"; then
4246
4247   ########################################################
4248   # Now see if we can find the uuid libs in standard paths
4249   # On some systems, the uuid API is in libc, so we have to
4250   # be careful not to insert a spurious -luuid.
4251
4252   UUID_LIBS=""
4253   AC_LIBTESTFUNC(uuid, uuid_generate,
4254           [
4255             case " $LIBS " in
4256                 *\ -luuid\ *)
4257                 UUID_LIBS="-luuid"
4258                 SMB_REMOVE_LIB(uuid)
4259                 ;;
4260             esac
4261
4262             with_dnsupdate_support=yes
4263             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4264         ],
4265         [
4266             if test x"$with_dnsupdate_support" = x"yes"; then
4267                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4268             else
4269                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4270             fi
4271             with_dnsupdate_support=no
4272         ])
4273 fi
4274
4275 #################################################
4276 # check for automount support
4277 AC_MSG_CHECKING(whether to use automount)
4278 AC_ARG_WITH(automount,
4279 [  --with-automount        Include automount support (default=no)],
4280 [ case "$withval" in
4281   yes)
4282     AC_MSG_RESULT(yes)
4283     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4284     ;;
4285   *)
4286     AC_MSG_RESULT(no)
4287     ;;
4288   esac ],
4289   AC_MSG_RESULT(no)
4290 )
4291
4292 #################################################
4293 # check for smbmount support
4294 AC_MSG_CHECKING(whether to use smbmount)
4295 AC_ARG_WITH(smbmount,
4296 [  --with-smbmount         Include smbmount (Linux only) support (default=no)],
4297 [ case "$withval" in
4298   yes)
4299         case "$host_os" in
4300         *linux*)
4301                 AC_MSG_RESULT(yes)
4302                 AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
4303                 SMBMOUNT_PROGS="bin/smbmount bin/smbmnt bin/smbumount"
4304                 ;;
4305         *)
4306                 AC_MSG_ERROR(not on a linux system!)
4307                 ;;
4308         esac
4309     ;;
4310   *)
4311     AC_MSG_RESULT(no)
4312     ;;
4313   esac ],
4314   AC_MSG_RESULT(no)
4315 )
4316
4317 #################################################
4318 # check for mount- and umount.cifs support
4319 CIFSMOUNT_PROGS=""
4320 INSTALL_CIFSMOUNT=""
4321 UNINSTALL_CIFSMOUNT=""
4322 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4323 AC_ARG_WITH(cifsmount,
4324 [  --with-cifsmount        Include mount.cifs and umount.cifs (Linux only) support (default=yes)],
4325 [ case "$withval" in
4326   no)
4327         AC_MSG_RESULT(no)
4328         ;;
4329   *)
4330         case "$host_os" in
4331         *linux*)
4332                 AC_MSG_RESULT(yes)
4333                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4334                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4335                 INSTALL_CIFSMOUNT="installcifsmount"
4336                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4337                 ;;
4338         *)
4339                 AC_MSG_ERROR(not on a linux system!)
4340                 ;;
4341         esac
4342     ;;
4343   esac ],
4344 [ case "$host_os" in
4345   *linux*)
4346         AC_MSG_RESULT(yes)
4347         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4348         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4349         INSTALL_CIFSMOUNT="installcifsmount"
4350         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4351         ;;
4352   *)
4353         AC_MSG_RESULT(no)
4354         ;;
4355   esac ]
4356 )
4357
4358
4359 #################################################
4360 # check for a PAM clear-text auth, accounts, password and session support
4361 with_pam_for_crypt=no
4362 try_pam=no
4363 AC_MSG_CHECKING(whether to try PAM support)
4364 AC_ARG_WITH(pam,
4365 [  --with-pam              Include PAM support (default=no)],
4366 [ case "$withval" in
4367   yes|no)
4368     try_pam=$withval
4369     ;;
4370   esac
4371 ])
4372 AC_MSG_RESULT([$try_pam])
4373
4374 use_pam=no
4375 create_pam_modules=no
4376 if test x"${try_pam}" != x"no";then
4377         use_pam=yes
4378         create_pam_modules=yes
4379
4380         AC_CHECK_HEADERS(security/pam_appl.h)
4381         if test x"$ac_cv_header_security_pam_appl_h" != x"yes"; then
4382                 if test x"${try_pam}" = x"yes";then
4383                         AC_MSG_ERROR([--with-pam=yes but security/pam_appl.h not found])
4384                 fi
4385                 use_pam=no
4386                 create_pam_modules=no
4387         fi
4388
4389         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4390         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4391                 if test x"${try_pam}" = x"yes";then
4392                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4393                 fi
4394                 use_pam=no
4395                 create_pam_modules=no
4396         fi
4397
4398         AC_CHECK_HEADERS(security/pam_modules.h,,,[[
4399                 #if HAVE_SECURITY_PAM_APPL_H
4400                 #include <security/pam_appl.h>
4401                 #endif
4402         ]])
4403         if test x"$ac_cv_header_security_pam_modules_h" = x"no"; then
4404                 if test x"${try_pam}" = x"yes";then
4405                         AC_MSG_ERROR([--with-pam=yes but security/pam_modules.h not found])
4406                 fi
4407                 create_pam_modules=no
4408         fi
4409
4410         if test x"$use_pam" = x"yes"; then
4411                 AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4412                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4413                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4414                 with_pam_for_crypt=yes
4415
4416                 if test x"$create_pam_modules" = x"yes"; then
4417                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4418                         # this checks are optional,
4419                         # we don't care about the results here
4420                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4421                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4422                 else
4423                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4424                 fi
4425         fi
4426         AC_MSG_CHECKING(whether to use PAM support)
4427         AC_MSG_RESULT([$use_pam])
4428
4429         AC_MSG_CHECKING(whether to have PAM MODULES support)
4430         AC_MSG_RESULT([$create_pam_modules])
4431 fi # try_pam != no
4432
4433 #################################################
4434 # check for pam_smbpass support
4435 PAM_MODULES=""
4436 INSTALL_PAM_MODULES=""
4437 UNINSTALL_PAM_MODULES=""
4438 AC_MSG_CHECKING(whether to use pam_smbpass)
4439 AC_ARG_WITH(pam_smbpass,
4440 [  --with-pam_smbpass      Build PAM module for authenticating against passdb backends (default=no)],
4441 [ case "$withval" in
4442   yes)
4443     AC_MSG_RESULT(yes)
4444
4445        # Conditions under which pam_smbpass should not be built.
4446
4447        if test x"$BLDSHARED" != x"true"; then
4448           AC_MSG_ERROR([No support for shared modules])
4449        elif test x"$create_pam_modules" != x"yes"; then
4450           AC_MSG_ERROR([No support for PAM MODULES])
4451        else
4452           PAM_MODULES="pam_smbpass"
4453           INSTALL_PAM_MODULES="installpammodules"
4454           UNINSTALL_PAM_MODULES="uninstallpammodules"
4455        fi
4456     ;;
4457   *)
4458     AC_MSG_RESULT(no)
4459     ;;
4460   esac ],
4461   AC_MSG_RESULT(no)
4462 )
4463
4464
4465 ###############################################
4466 # test for where we get crypt() from
4467 AC_SEARCH_LIBS(crypt, [crypt],
4468   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
4469   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
4470
4471 ##
4472 ## moved after the check for -lcrypt in order to
4473 ## ensure that the necessary libraries are included
4474 ## check checking for truncated salt.  Wrapped by the
4475 ## $with_pam_for_crypt variable as above   --jerry
4476 ##
4477 if test $with_pam_for_crypt = no; then
4478 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4479 crypt_LIBS="$LIBS"
4480 LIBS="$AUTH_LIBS $LIBS"
4481 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
4482         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4483 LIBS="$crypt_LIBS"])
4484 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4485         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4486 fi
4487 fi
4488
4489 #################################################
4490 # check for a NISPLUS_HOME support
4491 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4492 AC_ARG_WITH(nisplus-home,
4493 [  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
4494 [ case "$withval" in
4495   yes)
4496     AC_MSG_RESULT(yes)
4497     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4498     ;;
4499   *)
4500     AC_MSG_RESULT(no)
4501     ;;
4502   esac ],
4503   AC_MSG_RESULT(no)
4504 )
4505
4506 #################################################
4507 # check for syslog logging
4508 AC_MSG_CHECKING(whether to use syslog logging)
4509 AC_ARG_WITH(syslog,
4510 [  --with-syslog           Include experimental SYSLOG support (default=no)],
4511 [ case "$withval" in
4512   yes)
4513     AC_MSG_RESULT(yes)
4514     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4515     ;;
4516   *)
4517     AC_MSG_RESULT(no)
4518     ;;
4519   esac ],
4520   AC_MSG_RESULT(no)
4521 )
4522
4523 #################################################
4524 # check for experimental disk-quotas support
4525
4526 samba_cv_WITH_QUOTAS=auto
4527 samba_cv_TRY_QUOTAS=no
4528 samba_cv_RUN_QUOTA_TESTS=auto
4529 samba_cv_WITH_SYS_QUOTAS=auto
4530 samba_cv_TRY_SYS_QUOTAS=auto
4531 samba_cv_SYSQUOTA_FOUND=no
4532
4533 AC_MSG_CHECKING(whether to try disk-quotas support)
4534 AC_ARG_WITH(quotas,
4535 [  --with-quotas           Include disk-quota support (default=no)],
4536 [ case "$withval" in
4537   yes)
4538     AC_MSG_RESULT(yes)
4539     samba_cv_WITH_QUOTAS=yes
4540     samba_cv_TRY_QUOTAS=yes
4541     samba_cv_RUN_QUOTA_TESTS=yes
4542     #set sys quotas to auto in this case
4543     samba_cv_TRY_SYS_QUOTAS=auto
4544     ;;
4545   auto)
4546     AC_MSG_RESULT(auto)
4547     samba_cv_WITH_QUOTAS=auto
4548     samba_cv_TRY_QUOTAS=auto
4549     samba_cv_RUN_QUOTA_TESTS=auto
4550     #set sys quotas to auto in this case
4551     samba_cv_TRY_SYS_QUOTAS=auto
4552     ;;
4553   no)
4554     AC_MSG_RESULT(no)
4555     samba_cv_WITH_QUOTAS=no
4556     samba_cv_TRY_QUOTAS=no
4557     samba_cv_RUN_QUOTA_TESTS=no
4558     ;;
4559   *)
4560     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4561     ;;
4562   esac ],
4563   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4564 )
4565
4566 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4567 AC_ARG_WITH(sys-quotas,
4568 [  --with-sys-quotas       Include lib/sysquotas.c support (default=auto)],
4569 [ case "$withval" in
4570   yes)
4571     AC_MSG_RESULT(yes)
4572     samba_cv_WITH_SYS_QUOTAS=yes
4573     samba_cv_TRY_SYS_QUOTAS=yes
4574     samba_cv_RUN_QUOTA_TESTS=yes
4575     ;;
4576   auto)
4577     AC_MSG_RESULT(auto)
4578     samba_cv_WITH_SYS_QUOTAS=auto
4579     samba_cv_TRY_SYS_QUOTAS=auto
4580     samba_cv_RUN_QUOTA_TESTS=auto
4581     ;;
4582   no)
4583     AC_MSG_RESULT(no)
4584     samba_cv_WITH_SYS_QUOTAS=no
4585     samba_cv_TRY_SYS_QUOTAS=no
4586     ;;
4587   *)
4588     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4589     ;;
4590   esac ],
4591   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4592 )
4593
4594 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4595 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4596   case "$host_os" in
4597         *linux*)
4598             AC_MSG_RESULT(yes)
4599             samba_cv_TRY_SYS_QUOTAS=yes
4600             samba_cv_RUN_QUOTA_TESTS=yes
4601             ;;
4602         *)
4603             AC_MSG_RESULT(no)
4604             samba_cv_TRY_SYS_QUOTAS=no
4605             ;;
4606   esac
4607 fi
4608
4609 #############################################
4610 # only check for quota stuff if --with-quotas
4611 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4612
4613 case "$host_os" in
4614         # on linux we didn't need to test we have builtin support
4615         *linux*)
4616             samba_cv_SYSQUOTA_FOUND=yes
4617             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4618             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4619             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4620             AC_MSG_RESULT(yes)
4621
4622             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4623             samba_cv_found_xfs_header=yes
4624             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4625             AC_MSG_RESULT(yes)
4626             ;;
4627         *solaris*)
4628             # need to set this define when using static linking (BUG 1473)
4629             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4630             ;;
4631         *)
4632             ;;
4633 esac
4634
4635 # some broken header files need this
4636 AC_CHECK_HEADER(asm/types.h,[
4637             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4638             AC_ADD_INCLUDE(<asm/types.h>)
4639             ])
4640
4641 # For quotas on Veritas VxFS filesystems
4642 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4643
4644 # For sys/quota.h and linux/quota.h
4645 AC_CHECK_HEADERS(sys/quota.h)
4646
4647 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4648 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4649 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4650 AC_TRY_COMPILE([
4651 #include "confdefs.h"
4652 #ifdef HAVE_SYS_TYPES_H
4653 #include <sys/types.h>
4654 #endif
4655 #ifdef HAVE_ASM_TYPES_H
4656 #include <asm/types.h>
4657 #endif
4658 #include <sys/quota.h>
4659 ],[int i = Q_XGETQUOTA;],
4660 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4661 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4662         samba_cv_found_xfs_header=yes
4663 fi
4664 fi
4665
4666 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4667 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4668 AC_TRY_COMPILE([
4669 #include "confdefs.h"
4670 #ifdef HAVE_SYS_QUOTA_H
4671 #include <sys/quota.h>
4672 #endif
4673 ],[
4674 struct dqblk D;
4675 D.dqb_fsoftlimit = 0;],
4676 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4677 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4678         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4679 fi
4680
4681 ##################
4682 # look for a working quota system
4683
4684 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4685 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4686 AC_TRY_RUN_STRICT([
4687 #define HAVE_QUOTACTL_4A 1
4688 #define AUTOCONF_TEST 1
4689 #include "confdefs.h"
4690 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4691            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4692 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4693     samba_cv_SYSQUOTA_FOUND=yes;
4694     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4695     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4696 fi
4697 fi
4698
4699 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4700 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4701 AC_TRY_RUN_STRICT([
4702 #define HAVE_QUOTACTL_4B 1
4703 #define AUTOCONF_TEST 1
4704 #include "confdefs.h"
4705 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4706            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4707 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4708     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4709     samba_cv_SYSQUOTA_FOUND=yes;
4710     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4711     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4712 fi
4713 fi
4714
4715 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4716 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4717 AC_TRY_RUN_STRICT([
4718 #define HAVE_QUOTACTL_3 1
4719 #define AUTOCONF_TEST 1
4720 #include "confdefs.h"
4721 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4722            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4723 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4724     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4725     samba_cv_SYSQUOTA_FOUND=yes;
4726     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4727     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4728 fi
4729 fi
4730
4731 #################################################
4732 # check for mntent.h and struct mntent
4733 AC_CHECK_HEADERS(mntent.h)
4734 #################################################
4735 # check for setmntent,getmntent,endmntent
4736 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4737
4738 #################################################
4739 # check for devnm.h and struct mntent
4740 AC_CHECK_HEADERS(devnm.h)
4741 #################################################
4742 # check for devnm
4743 AC_CHECK_FUNCS(devnm)
4744
4745 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4746     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4747         # if --with-sys-quotas=yes then build it
4748         # you have can use the get/set quota command smb.conf
4749         # options then
4750         samba_cv_SYSQUOTA_FOUND=auto
4751     fi
4752     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4753         # if --with-sys-quotas=yes then build it
4754         # you have can use the get/set quota command smb.conf
4755         # options then
4756         samba_cv_TRY_SYS_QUOTAS=auto
4757     fi
4758 fi
4759
4760 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4761 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4762 SAVE_CPPFLAGS="$CPPFLAGS"
4763 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4764 AC_TRY_COMPILE([
4765 #include "confdefs.h"
4766 #define NO_PROTO_H 1
4767 #define NO_CONFIG_H 1
4768 #define HAVE_SYS_QUOTAS 1
4769 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4770 #include "${srcdir-.}/lib/sysquotas.c"
4771 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4772 CPPFLAGS="$SAVE_CPPFLAGS"
4773 ])
4774 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4775 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4776     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4777         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4778         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4779         samba_cv_WE_USE_SYS_QUOTAS=yes
4780         AC_MSG_RESULT(yes)
4781     else
4782         AC_MSG_RESULT(no)
4783     fi
4784 fi
4785 fi
4786
4787 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4788 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4789 SAVE_CPPFLAGS="$CPPFLAGS"
4790 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4791 AC_TRY_COMPILE([
4792 #include "confdefs.h"
4793 #define NO_PROTO_H 1
4794 #define NO_CONFIG_H 1
4795 #define HAVE_SYS_QUOTAS 1
4796 #define HAVE_XFS_QUOTAS 1
4797 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4798 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4799 CPPFLAGS="$SAVE_CPPFLAGS"
4800 ])
4801 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4802     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4803         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4804     fi
4805 fi
4806 fi
4807
4808 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4809 SAVE_CPPFLAGS="$CPPFLAGS"
4810 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4811 AC_TRY_COMPILE([
4812 #include "confdefs.h"
4813 #define NO_PROTO_H 1
4814 #define NO_CONFIG_H 1
4815 #include "${srcdir-.}/smbd/quotas.c"
4816 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4817 CPPFLAGS="$SAVE_CPPFLAGS"
4818 ])
4819 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4820 AC_MSG_CHECKING(whether to use the old quota support)
4821     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4822       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4823         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4824         AC_MSG_RESULT(yes)
4825       else
4826         AC_MSG_RESULT(no)
4827       fi
4828     else
4829       AC_MSG_RESULT(no)
4830     fi
4831 fi
4832
4833 ####################
4834 # End of quota check samba_cv_RUN_QUOTA_TESTS
4835 fi
4836
4837 #################################################
4838 # check for experimental utmp accounting
4839
4840 AC_MSG_CHECKING(whether to support utmp accounting)
4841 WITH_UTMP=yes
4842 AC_ARG_WITH(utmp,
4843 [  --with-utmp             Include utmp accounting (default, if supported by OS)],
4844 [ case "$withval" in
4845   no)
4846                 WITH_UTMP=no
4847                 ;;
4848   *)
4849                 WITH_UTMP=yes
4850                 ;;
4851   esac ],
4852 )
4853
4854 # utmp requires utmp.h
4855 # Note similar check earlier, when checking utmp details.
4856
4857 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4858         utmp_no_reason=", no utmp.h on $host_os"
4859         WITH_UTMP=no
4860 fi
4861
4862 # Display test results
4863
4864 if test x"$WITH_UTMP" = x"yes"; then
4865         AC_MSG_RESULT(yes)
4866         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4867 else
4868         AC_MSG_RESULT(no$utmp_no_reason)
4869 fi
4870
4871 INSTALLLIBCMD_SH=:
4872 INSTALLLIBCMD_A=:
4873 UNINSTALLLIBCMD_SH=:
4874 UNINSTALLLIBCMD_A=:
4875
4876 if test $BLDSHARED = true; then
4877         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
4878         UNINSTALLLIBCMD_SH="rm -f"
4879 fi
4880 if test $enable_static = yes; then
4881         INSTALLLIBCMD_A="\$(INSTALLCMD)"
4882         UNINSTALLLIBCMD_A="rm -f"
4883 fi
4884
4885 #################################################
4886 # should we build libmsrpc?
4887 INSTALL_LIBMSRPC=
4888 UNINSTALL_LIBMSRPC=
4889 LIBMSRPC_SHARED=
4890 LIBMSRPC=
4891 AC_MSG_CHECKING(whether to build the libmsrpc shared library)
4892 AC_ARG_WITH(libmsrpc,
4893 [  --with-libmsrpc         Build the libmsrpc shared library (default=yes if shared libs supported)],
4894 [ case "$withval" in
4895   no)
4896      AC_MSG_RESULT(no)
4897      ;;
4898   *)
4899      if test $BLDSHARED = true; then
4900         LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
4901         LIBMSRPC=libmsrpc
4902         AC_MSG_RESULT(yes)
4903      else
4904         enable_static=yes
4905         AC_MSG_RESULT(no shared library support -- will supply static library)
4906      fi
4907      if test $enable_static = yes; then
4908         LIBMSRPC=libmsrpc
4909      fi
4910      INSTALL_LIBMSRPC=installlibmsrpc
4911      UNINSTALL_LIBMSRPC=uninstalllibmsrpc
4912      ;;
4913   esac ],
4914 [
4915 # if unspecified, default is to built it if possible.
4916   if test $BLDSHARED = true; then
4917      LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
4918      LIBMSRPC=libmsrpc
4919      AC_MSG_RESULT(yes)
4920    else
4921      enable_static=yes
4922      AC_MSG_RESULT(no shared library support -- will supply static library)
4923    fi
4924    if test $enable_static = yes; then
4925      LIBMSRPC=libmsrpc
4926   fi]
4927   INSTALL_LIBMSRPC=installlibmsrpc
4928   UNINSTALL_LIBMSRPC=uninstalllibmsrpc
4929 )
4930
4931
4932 #################################################
4933 # should we build libaddns?
4934 INSTALL_LIBADDNS=
4935 UNINSTALL_LIBADDNS=
4936 LIBADDNS_SHARED=
4937 LIBADDNS=
4938 AC_MSG_CHECKING(whether to build the libaddns shared library)
4939 AC_ARG_WITH(libaddns,
4940 [  --with-libaddns         Build the libaddns shared library (default=yes if shared libs supported)],
4941 [ case "$withval" in
4942   no)
4943      AC_MSG_RESULT(no)
4944      ;;
4945   *)
4946      if test $BLDSHARED = true; then
4947         LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
4948         LIBADDNS=libaddns
4949         AC_MSG_RESULT(yes)
4950      else
4951         enable_static=yes
4952         AC_MSG_RESULT(no shared library support -- will supply static library)
4953      fi
4954      if test $enable_static = yes; then
4955         LIBADDNS=libaddns
4956      fi
4957      INSTALL_LIBADDNS=installlibaddns
4958      UNINSTALL_LIBADDNS=uninstalllibaddns
4959      ;;
4960   esac ],
4961 [
4962 # if unspecified, default is to built it if possible.
4963   if test $BLDSHARED = true; then
4964      LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
4965      LIBADDNS=libaddns
4966      AC_MSG_RESULT(yes)
4967    else
4968      enable_static=yes
4969      AC_MSG_RESULT(no shared library support -- will supply static library)
4970    fi
4971    if test $enable_static = yes; then
4972      LIBADDNS=libaddns
4973   fi]
4974   INSTALL_LIBADDNS=installlibaddns
4975   UNINSTALL_LIBADDNS=uninstalllibaddns
4976 )
4977
4978 #################################################
4979 # should we build libsmbclient?
4980 INSTALL_LIBSMBCLIENT=
4981 UNINSTALL_LIBSMBCLIENT=
4982 LIBSMBCLIENT_SHARED=
4983 LIBSMBCLIENT=
4984 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
4985 AC_ARG_WITH(libsmbclient,
4986 [  --with-libsmbclient     Build the libsmbclient shared library (default=yes if shared libs supported)],
4987 [ case "$withval" in
4988   no)
4989      AC_MSG_RESULT(no)
4990      ;;
4991   *)
4992      if test $BLDSHARED = true; then
4993         LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
4994         LIBSMBCLIENT=libsmbclient
4995         AC_MSG_RESULT(yes)
4996      else
4997         enable_static=yes
4998         AC_MSG_RESULT(no shared library support -- will supply static library)
4999      fi
5000      if test $enable_static = yes; then
5001         LIBSMBCLIENT=libsmbclient
5002      fi
5003      INSTALL_LIBSMBCLIENT=installclientlib
5004      UNINSTALL_LIBSMBCLIENT=uninstallclientlib
5005      ;;
5006   esac ],
5007 [
5008 # if unspecified, default is to built it if possible.
5009   if test $BLDSHARED = true; then
5010      LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
5011      LIBSMBCLIENT=libsmbclient
5012      AC_MSG_RESULT(yes)
5013    else
5014      enable_static=yes
5015      AC_MSG_RESULT(no shared library support -- will supply static library)
5016    fi
5017    if test $enable_static = yes; then
5018      LIBSMBCLIENT=libsmbclient
5019   fi]
5020   INSTALL_LIBSMBCLIENT=installclientlib
5021   UNINSTALL_LIBSMBCLIENT=uninstallclientlib
5022 )
5023
5024 INSTALL_LIBSMBSHAREMODES=
5025 LIBSMBSHAREMODES_SHARED=
5026 LIBSMBSHAREMODES=
5027 AC_MSG_CHECKING(whether to build the libsmbsharemodes shared library)
5028 AC_ARG_WITH(libsmbsharemodes,
5029 [  --with-libsmbsharemodes     Build the libsmbsharemodes shared library (default=yes if shared libs supported)],
5030 [ case "$withval" in
5031   no)
5032      AC_MSG_RESULT(no)
5033      ;;
5034   *)
5035      if test $BLDSHARED = true; then
5036         LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
5037         LIBSMBSHAREMODES=libsmbsharemodes
5038         AC_MSG_RESULT(yes)
5039      else
5040         enable_static=yes
5041         AC_MSG_RESULT(no shared library support -- will supply static library)
5042      fi
5043      if test $enable_static = yes; then
5044         LIBSMBSHAREMODES=libsmbsharemodes
5045      fi
5046      INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
5047      UNINSTALL_LIBSMBSHAREMODES=uninstalllibsmbsharemodes
5048      ;;
5049   esac ],
5050 [
5051 # if unspecified, default is to built it if possible.
5052   if test $BLDSHARED = true; then
5053      LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
5054      LIBSMBSHAREMODES=libsmbsharemodes
5055      AC_MSG_RESULT(yes)
5056    else
5057      enable_static=yes
5058      AC_MSG_RESULT(no shared library support -- will supply static library)
5059    fi
5060    if test $enable_static = yes; then
5061      LIBSMBSHAREMODES=libsmbsharemodes
5062   fi]
5063   INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
5064 )
5065
5066 #################################################
5067 # these tests are taken from the GNU fileutils package
5068 AC_CHECKING(how to get filesystem space usage)
5069 space=no
5070
5071 # Test for statvfs64.
5072 if test $space = no; then
5073   # SVR4
5074   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
5075   [AC_TRY_RUN([
5076 #if defined(HAVE_UNISTD_H)
5077 #include <unistd.h>
5078 #endif
5079 #include <sys/types.h>
5080 #include <sys/statvfs.h>
5081   main ()
5082   {
5083     struct statvfs64 fsd;
5084     return statvfs64 (".", &fsd);
5085   }],
5086   fu_cv_sys_stat_statvfs64=yes,
5087   fu_cv_sys_stat_statvfs64=no,
5088   fu_cv_sys_stat_statvfs64=cross)])
5089   if test $fu_cv_sys_stat_statvfs64 = yes; then
5090     space=yes
5091     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
5092   fi
5093 fi
5094
5095 # Perform only the link test since it seems there are no variants of the
5096 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
5097 # because that got a false positive on SCO OSR5.  Adding the declaration
5098 # of a `struct statvfs' causes this test to fail (as it should) on such
5099 # systems.  That system is reported to work fine with STAT_STATFS4 which
5100 # is what it gets when this test fails.
5101 if test $space = no; then
5102   # SVR4
5103   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
5104                  [AC_TRY_LINK([#include <sys/types.h>
5105 #include <sys/statvfs.h>],
5106                               [struct statvfs fsd; statvfs (0, &fsd);],
5107                               fu_cv_sys_stat_statvfs=yes,
5108                               fu_cv_sys_stat_statvfs=no)])
5109   if test $fu_cv_sys_stat_statvfs = yes; then
5110     space=yes
5111     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
5112   fi
5113 fi
5114
5115 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
5116 # This is not the case on ancient Linux systems.
5117
5118 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
5119     AC_TRY_COMPILE([#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
5120         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
5121 if test x"$samba_cv_fsid_int" = x"yes"; then
5122     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
5123 fi
5124
5125 if test $space = no; then
5126   # DEC Alpha running OSF/1
5127   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
5128   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
5129   [AC_TRY_RUN([
5130 #include <sys/param.h>
5131 #include <sys/types.h>
5132 #include <sys/mount.h>
5133   main ()
5134   {
5135     struct statfs fsd;
5136     fsd.f_fsize = 0;
5137     return statfs (".", &fsd, sizeof (struct statfs));
5138   }],
5139   fu_cv_sys_stat_statfs3_osf1=yes,
5140   fu_cv_sys_stat_statfs3_osf1=no,
5141   fu_cv_sys_stat_statfs3_osf1=no)])
5142   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5143   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5144     space=yes
5145     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5146   fi
5147 fi
5148
5149 if test $space = no; then
5150 # AIX
5151   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5152 member (AIX, 4.3BSD)])
5153   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5154   [AC_TRY_RUN([
5155 #ifdef HAVE_SYS_PARAM_H
5156 #include <sys/param.h>
5157 #endif
5158 #ifdef HAVE_SYS_MOUNT_H
5159 #include <sys/mount.h>
5160 #endif
5161 #ifdef HAVE_SYS_VFS_H
5162 #include <sys/vfs.h>
5163 #endif
5164   main ()
5165   {
5166   struct statfs fsd;
5167   fsd.f_bsize = 0;
5168   return statfs (".", &fsd);
5169   }],
5170   fu_cv_sys_stat_statfs2_bsize=yes,
5171   fu_cv_sys_stat_statfs2_bsize=no,
5172   fu_cv_sys_stat_statfs2_bsize=no)])
5173   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5174   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5175     space=yes
5176     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5177   fi
5178 fi
5179
5180 if test $space = no; then
5181 # SVR3
5182   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5183   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5184   [AC_TRY_RUN([#include <sys/types.h>
5185 #include <sys/statfs.h>
5186   main ()
5187   {
5188   struct statfs fsd;
5189   return statfs (".", &fsd, sizeof fsd, 0);
5190   }],
5191     fu_cv_sys_stat_statfs4=yes,
5192     fu_cv_sys_stat_statfs4=no,
5193     fu_cv_sys_stat_statfs4=no)])
5194   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5195   if test $fu_cv_sys_stat_statfs4 = yes; then
5196     space=yes
5197     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5198   fi
5199 fi
5200
5201 if test $space = no; then
5202 # 4.4BSD and NetBSD
5203   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5204 member (4.4BSD and NetBSD)])
5205   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5206   [AC_TRY_RUN([#include <sys/types.h>
5207 #ifdef HAVE_SYS_PARAM_H
5208 #include <sys/param.h>
5209 #endif
5210 #ifdef HAVE_SYS_MOUNT_H
5211 #include <sys/mount.h>
5212 #endif
5213   main ()
5214   {
5215   struct statfs fsd;
5216   fsd.f_fsize = 0;
5217   return statfs (".", &fsd);
5218   }],
5219   fu_cv_sys_stat_statfs2_fsize=yes,
5220   fu_cv_sys_stat_statfs2_fsize=no,
5221   fu_cv_sys_stat_statfs2_fsize=no)])
5222   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5223   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5224     space=yes
5225         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5226   fi
5227 fi
5228
5229 if test $space = no; then
5230   # Ultrix
5231   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5232   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5233   [AC_TRY_RUN([#include <sys/types.h>
5234 #ifdef HAVE_SYS_PARAM_H
5235 #include <sys/param.h>
5236 #endif
5237 #ifdef HAVE_SYS_MOUNT_H
5238 #include <sys/mount.h>
5239 #endif
5240 #ifdef HAVE_SYS_FS_TYPES_H
5241 #include <sys/fs_types.h>
5242 #endif
5243   main ()
5244   {
5245   struct fs_data fsd;
5246   /* Ultrix's statfs returns 1 for success,
5247      0 for not mounted, -1 for failure.  */
5248   return statfs (".", &fsd) != 1;
5249   }],
5250   fu_cv_sys_stat_fs_data=yes,
5251   fu_cv_sys_stat_fs_data=no,
5252   fu_cv_sys_stat_fs_data=no)])
5253   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5254   if test $fu_cv_sys_stat_fs_data = yes; then
5255     space=yes
5256     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5257   fi
5258 fi
5259
5260 #
5261 # As a gating factor for large file support, in order to
5262 # use <4GB files we must have the following minimal support
5263 # available.
5264 # long long, and a 64 bit off_t or off64_t.
5265 # If we don't have all of these then disable large
5266 # file support.
5267 #
5268 AC_MSG_CHECKING([if large file support can be enabled])
5269 AC_TRY_COMPILE([
5270 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5271 #include <sys/types.h>
5272 #else
5273 __COMPILE_ERROR_
5274 #endif
5275 ],
5276 [int i],
5277 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5278 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5279         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5280 fi
5281 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5282
5283 #################################################
5284 # check for cluster extensions
5285
5286 AC_MSG_CHECKING(whether to include cluster support)
5287 AC_ARG_WITH(cluster-support,
5288 [  --with-cluster-support  Enable cluster extensions (default=no)])
5289 if test "x$with_cluster_support" = "xyes"; then
5290     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5291     AC_MSG_RESULT(yes)
5292 else
5293     AC_MSG_RESULT(no)
5294 fi
5295
5296
5297 #################################################
5298 # check for ACL support
5299
5300 AC_MSG_CHECKING(whether to support ACLs)
5301 AC_ARG_WITH(acl-support,
5302 [  --with-acl-support      Include ACL support (default=no)],
5303 [ case "$withval" in
5304   yes)
5305
5306         case "$host_os" in
5307         *sysv5*)
5308                 AC_MSG_RESULT(Using UnixWare ACLs)
5309                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5310                 default_static_modules="$default_static_modules vfs_solarisacl"
5311                 ;;
5312         *solaris*)
5313                 AC_MSG_RESULT(Using solaris ACLs)
5314                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5315                 ACL_LIBS="$ACL_LIBS -lsec"
5316                 default_static_modules="$default_static_modules vfs_solarisacl"
5317                 ;;
5318         *hpux*)
5319                 AC_MSG_RESULT(Using HPUX ACLs)
5320                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5321                 default_static_modules="$default_static_modules vfs_hpuxacl"
5322                 ;;
5323         *irix*)
5324                 AC_MSG_RESULT(Using IRIX ACLs)
5325                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5326                 default_static_modules="$default_static_modules vfs_irixacl"
5327                 ;;
5328         *aix*)
5329                 AC_MSG_RESULT(Using AIX ACLs)
5330                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5331                 default_static_modules="$default_static_modules vfs_aixacl"
5332                 ;;
5333         *osf*)
5334                 AC_MSG_RESULT(Using Tru64 ACLs)
5335                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5336                 ACL_LIBS="$ACL_LIBS -lpacl"
5337                 default_static_modules="$default_static_modules vfs_tru64acl"
5338                 ;;
5339         *freebsd[[5-9]]*)
5340                 AC_MSG_RESULT(Using FreeBSD posix ACLs)
5341                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether FreeBSD POSIX ACLs are available])
5342                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5343                 default_static_modules="$default_static_modules vfs_posixacl"
5344                 ;;
5345         *linux*)
5346                 AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5347                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5348                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
5349                         acl_LIBS=$LIBS
5350                         LIBS="$LIBS -lacl"
5351                         AC_TRY_LINK([
5352                                 #include <sys/types.h>
5353                                 #include <sys/acl.h>
5354                         ],[
5355                                 acl_t acl;
5356                                 int entry_id;
5357                                 acl_entry_t *entry_p;
5358                                 return acl_get_entry(acl, entry_id, entry_p);
5359                         ],
5360                         [samba_cv_HAVE_POSIX_ACLS=yes],
5361                         [samba_cv_HAVE_POSIX_ACLS=no])
5362                         LIBS=$acl_LIBS
5363                 ])
5364                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5365                         AC_MSG_RESULT(Using posix ACLs)
5366                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5367                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5368                                 acl_LIBS=$LIBS
5369                                 LIBS="$LIBS -lacl"
5370                                 AC_TRY_LINK([
5371                                         #include <sys/types.h>
5372                                         #include <sys/acl.h>
5373                                 ],[
5374                                         acl_permset_t permset_d;
5375                                         acl_perm_t perm;
5376                                         return acl_get_perm_np(permset_d, perm);
5377                                 ],
5378                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5379                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5380                                 LIBS=$acl_LIBS
5381                         ])
5382                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5383                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5384                         fi
5385                 fi
5386             ;;
5387          *)
5388                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5389                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
5390                         acl_LIBS=$LIBS
5391                         LIBS="$LIBS -lacl"
5392                         AC_TRY_LINK([
5393                                 #include <sys/types.h>
5394                                 #include <sys/acl.h>
5395                         ],[
5396                                 acl_t acl;
5397                                 int entry_id;
5398                                 acl_entry_t *entry_p;
5399                                 return acl_get_entry( acl, entry_id, entry_p);
5400                         ],
5401                         [samba_cv_HAVE_POSIX_ACLS=yes],
5402                         [samba_cv_HAVE_POSIX_ACLS=no])
5403                         LIBS=$acl_LIBS
5404                 ])
5405                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5406                         AC_MSG_RESULT(Using posix ACLs)
5407                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5408                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5409                                 acl_LIBS=$LIBS
5410                                 LIBS="$LIBS -lacl"
5411                                 AC_TRY_LINK([
5412                                         #include <sys/types.h>
5413                                         #include <sys/acl.h>
5414                                 ],[
5415                                         acl_permset_t permset_d;
5416                                         acl_perm_t perm;
5417                                         return acl_get_perm_np( permset_d, perm);
5418                                 ],
5419                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5420                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5421                                 LIBS=$acl_LIBS
5422                         ])
5423                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5424                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5425                         fi
5426                 fi
5427             ;;
5428         esac
5429         ;;
5430   *)
5431     AC_MSG_RESULT(no)
5432     AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5433     ;;
5434   esac ],
5435   AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5436   AC_MSG_RESULT(no)
5437 )
5438
5439 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5440    default_static_modules="$default_static_modules vfs_posixacl"
5441 fi
5442
5443 #################################################
5444 # check for AIO support
5445
5446 AC_MSG_CHECKING(whether to support asynchronous io)
5447 AC_ARG_WITH(aio-support,
5448 [  --with-aio-support      Include asynchronous io support (default=no)],
5449 [ case "$withval" in
5450   yes)
5451
5452         AC_MSG_RESULT(yes)
5453         case "$host_os" in
5454         *)
5455                 AIO_LIBS=$LIBS
5456                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5457                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5458                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5459                 aio_LIBS=$LIBS
5460                 LIBS=$AIO_LIBS
5461                 AC_TRY_LINK([#include <sys/types.h>
5462 #include <aio.h>],
5463 [ struct aiocb a; return aio_read(&a);],
5464 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5465                 LIBS=$aio_LIBS])
5466                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5467                 aio_LIBS=$LIBS
5468                 LIBS=$AIO_LIBS
5469                 AC_TRY_LINK([#include <sys/types.h>
5470 #include <aio.h>],
5471 [ struct aiocb64 a; return aio_read64(&a);],
5472 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5473                 LIBS=$aio_LIBS])
5474                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5475                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5476                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5477                         LIBS=$AIO_LIBS
5478                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5479                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5480                         LIBS=$AIO_LIBS
5481                 fi
5482
5483                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5484                         AC_MSG_CHECKING(for aio_read)
5485                         AC_LINK_IFELSE([#include <aio.h>
5486 int main() { struct aiocb a; return aio_read(&a); }],
5487 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5488 [AC_MSG_RESULT(no)])
5489
5490                         AC_MSG_CHECKING(for aio_write)
5491                         AC_LINK_IFELSE([#include <aio.h>
5492 int main() { struct aiocb a; return aio_write(&a); }],
5493 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5494 [AC_MSG_RESULT(no)])
5495
5496                         AC_MSG_CHECKING(for aio_fsync)
5497                         AC_LINK_IFELSE([#include <aio.h>
5498 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5499 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5500 [AC_MSG_RESULT(no)])
5501
5502                         AC_MSG_CHECKING(for aio_return)
5503                         AC_LINK_IFELSE([#include <aio.h>
5504 int main() { struct aiocb a; return aio_return(&a); }],
5505 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5506 [AC_MSG_RESULT(no)])
5507
5508                         AC_MSG_CHECKING(for aio_error)
5509                         AC_LINK_IFELSE([#include <aio.h>
5510 int main() { struct aiocb a; return aio_error(&a); }],
5511 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5512 [AC_MSG_RESULT(no)])
5513
5514                         AC_MSG_CHECKING(for aio_cancel)
5515                         AC_LINK_IFELSE([#include <aio.h>
5516 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5517 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5518 [AC_MSG_RESULT(no)])
5519
5520                         AC_MSG_CHECKING(for aio_suspend)
5521                         AC_LINK_IFELSE([#include <aio.h>
5522 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5523 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5524 [AC_MSG_RESULT(no)])
5525                 fi
5526
5527                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5528                         AC_MSG_CHECKING(for aio_read64)
5529                         AC_LINK_IFELSE([#include <aio.h>
5530 int main() { struct aiocb a; return aio_read64(&a); }],
5531 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5532 [AC_MSG_RESULT(no)])
5533
5534                         AC_MSG_CHECKING(for aio_write64)
5535                         AC_LINK_IFELSE([#include <aio.h>
5536 int main() { struct aiocb a; return aio_write64(&a); }],
5537 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5538 [AC_MSG_RESULT(no)])
5539
5540                         AC_MSG_CHECKING(for aio_fsync64)
5541                         AC_LINK_IFELSE([#include <aio.h>
5542 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5543 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5544 [AC_MSG_RESULT(no)])
5545
5546                         AC_MSG_CHECKING(for aio_return64)
5547                         AC_LINK_IFELSE([#include <aio.h>
5548 int main() { struct aiocb a; return aio_return64(&a); }],
5549 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5550 [AC_MSG_RESULT(no)])
5551
5552                         AC_MSG_CHECKING(for aio_error64)
5553                         AC_LINK_IFELSE([#include <aio.h>
5554 int main() { struct aiocb a; return aio_error64(&a); }],
5555 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5556 [AC_MSG_RESULT(no)])
5557
5558                         AC_MSG_CHECKING(for aio_cancel64)
5559                         AC_LINK_IFELSE([#include <aio.h>
5560 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5561 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5562 [AC_MSG_RESULT(no)])
5563
5564                         AC_MSG_CHECKING(for aio_suspend64)
5565                         AC_LINK_IFELSE([#include <aio.h>
5566 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5567 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5568 [AC_MSG_RESULT(no)])
5569                 fi
5570             ;;
5571         esac
5572         ;;
5573   *)
5574     AC_MSG_RESULT(no)
5575     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5576     ;;
5577   esac ],
5578   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5579   AC_MSG_RESULT(no)
5580 )
5581
5582 #################################################
5583 # check for sendfile support
5584
5585 with_sendfile_support=yes
5586 AC_MSG_CHECKING(whether to check to support sendfile)
5587 AC_ARG_WITH(sendfile-support,
5588 [  --with-sendfile-support Check for sendfile support (default=yes)],
5589 [ case "$withval" in
5590   yes)
5591
5592         AC_MSG_RESULT(yes);
5593
5594         case "$host_os" in
5595         linux*-gnu* | gnu* | k*bsd*-gnu)
5596                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5597                 AC_TRY_LINK([#include <sys/sendfile.h>],
5598 [\
5599 int tofd, fromfd;
5600 off64_t offset;
5601 size_t total;
5602 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5603 ],
5604 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5605
5606                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5607                 AC_TRY_LINK([#include <sys/sendfile.h>],
5608 [\
5609 int tofd, fromfd;
5610 off_t offset;
5611 size_t total;
5612 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5613 ],
5614 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5615
5616 # Try and cope with broken Linux sendfile....
5617                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5618                 AC_TRY_LINK([\
5619 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5620 #undef _FILE_OFFSET_BITS
5621 #endif
5622 #include <sys/sendfile.h>],
5623 [\
5624 int tofd, fromfd;
5625 off_t offset;
5626 size_t total;
5627 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5628 ],
5629 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5630
5631         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5632                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5633                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5634                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5635         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5636                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5637                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5638                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5639         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5640                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5641                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5642         else
5643                 AC_MSG_RESULT(no);
5644         fi
5645
5646         ;;
5647         *freebsd* | *dragonfly* )
5648                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5649                 AC_TRY_LINK([\
5650 #include <sys/types.h>
5651 #include <unistd.h>
5652 #include <sys/socket.h>
5653 #include <sys/uio.h>],
5654 [\
5655         int fromfd, tofd, ret, total=0;
5656         off_t offset, nwritten;
5657         struct sf_hdtr hdr;
5658         struct iovec hdtrl;
5659         hdr.headers = &hdtrl;
5660         hdr.hdr_cnt = 1;
5661         hdr.trailers = NULL;
5662         hdr.trl_cnt = 0;
5663         hdtrl.iov_base = NULL;
5664         hdtrl.iov_len = 0;
5665         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5666 ],
5667 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5668
5669         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5670                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5671                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5672                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5673         else
5674                 AC_MSG_RESULT(no);
5675         fi
5676         ;;
5677
5678         *hpux*)
5679                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5680                 AC_TRY_LINK([\
5681 #include <sys/socket.h>
5682 #include <sys/uio.h>],
5683 [\
5684         int fromfd, tofd;
5685         size_t total=0;
5686         struct iovec hdtrl[2];
5687         ssize_t nwritten;
5688         off64_t offset;
5689
5690         hdtrl[0].iov_base = 0;
5691         hdtrl[0].iov_len = 0;
5692
5693         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5694 ],
5695 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5696         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5697                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5698                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5699                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5700         else
5701                 AC_MSG_RESULT(no);
5702         fi
5703
5704                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5705                 AC_TRY_LINK([\
5706 #include <sys/socket.h>
5707 #include <sys/uio.h>],
5708 [\
5709         int fromfd, tofd;
5710         size_t total=0;
5711         struct iovec hdtrl[2];
5712         ssize_t nwritten;
5713         off_t offset;
5714
5715         hdtrl[0].iov_base = 0;
5716         hdtrl[0].iov_len = 0;
5717
5718         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5719 ],
5720 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5721         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5722                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5723                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5724                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5725         else
5726                 AC_MSG_RESULT(no);
5727         fi
5728         ;;
5729
5730         *solaris*)
5731                 AC_CHECK_LIB(sendfile,sendfilev)
5732                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5733                 AC_TRY_LINK([\
5734 #include <sys/sendfile.h>],
5735 [\
5736         int sfvcnt;
5737         size_t xferred;
5738         struct sendfilevec vec[2];
5739         ssize_t nwritten;
5740         int tofd;
5741
5742         sfvcnt = 2;
5743
5744         vec[0].sfv_fd = SFV_FD_SELF;
5745         vec[0].sfv_flag = 0;
5746         vec[0].sfv_off = 0;
5747         vec[0].sfv_len = 0;
5748
5749         vec[1].sfv_fd = 0;
5750         vec[1].sfv_flag = 0;
5751         vec[1].sfv_off = 0;
5752         vec[1].sfv_len = 0;
5753         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5754 ],
5755 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5756
5757         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5758                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5759                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5760                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5761         else
5762                 AC_MSG_RESULT(no);
5763         fi
5764
5765                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5766                 AC_TRY_LINK([\
5767 #include <sys/sendfile.h>],
5768 [\
5769         int sfvcnt;
5770         size_t xferred;
5771         struct sendfilevec vec[2];
5772         ssize_t nwritten;
5773         int tofd;
5774
5775         sfvcnt = 2;
5776
5777         vec[0].sfv_fd = SFV_FD_SELF;
5778         vec[0].sfv_flag = 0;
5779         vec[0].sfv_off = 0;
5780         vec[0].sfv_len = 0;
5781
5782         vec[1].sfv_fd = 0;
5783         vec[1].sfv_flag = 0;
5784         vec[1].sfv_off = 0;
5785         vec[1].sfv_len = 0;
5786         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5787 ],
5788 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5789
5790         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5791                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5792                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5793                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5794         else
5795                 AC_MSG_RESULT(no);
5796         fi
5797         ;;
5798         *aix*)
5799                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5800                 AC_TRY_LINK([\
5801 #include <sys/socket.h>],
5802 [\
5803         int fromfd, tofd;
5804         size_t total=0;
5805         struct sf_parms hdtrl;
5806         ssize_t nwritten;
5807         off64_t offset;
5808
5809         hdtrl.header_data = 0;
5810         hdtrl.header_length = 0;
5811         hdtrl.file_descriptor = fromfd;
5812         hdtrl.file_offset = 0;
5813         hdtrl.file_bytes = 0;
5814         hdtrl.trailer_data = 0;
5815         hdtrl.trailer_length = 0;
5816
5817         nwritten = send_file(&tofd, &hdtrl, 0);
5818 ],
5819 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5820         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5821                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5822                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5823                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5824         else
5825                 AC_MSG_RESULT(no);
5826         fi
5827         ;;
5828         *)
5829         ;;
5830         esac
5831         ;;
5832   *)
5833     AC_MSG_RESULT(no)
5834     ;;
5835   esac ],
5836   AC_MSG_RESULT(yes)
5837 )
5838
5839 ############################################
5840 # See if we have the Linux readahead syscall.
5841
5842 AC_CACHE_CHECK([for Linux readahead],
5843                 samba_cv_HAVE_LINUX_READAHEAD,[
5844
5845     AC_TRY_LINK([
5846 #if defined(HAVE_UNISTD_H)
5847 #include <unistd.h>
5848 #endif
5849 #include <fcntl.h>],
5850     [ssize_t err = readahead(0,0,0x80000);],
5851     samba_cv_HAVE_LINUX_READAHEAD=yes,
5852     samba_cv_HAVE_LINUX_READAHEAD=no)])
5853
5854 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5855   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5856              [Whether Linux readahead is available])
5857 fi
5858
5859 ############################################
5860 # See if we have the posix_fadvise syscall.
5861
5862 AC_CACHE_CHECK([for posix_fadvise],
5863                 samba_cv_HAVE_POSIX_FADVISE,[
5864     AC_TRY_LINK([
5865 #if defined(HAVE_UNISTD_H)
5866 #include <unistd.h>
5867 #endif
5868 #include <fcntl.h>],
5869     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5870     samba_cv_HAVE_POSIX_FADVISE=yes,
5871     samba_cv_HAVE_POSIX_FADVISE=no)])
5872
5873 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5874   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5875              [Whether posix_fadvise is available])
5876 fi
5877
5878
5879
5880 #################################################
5881 # Check whether winbind is supported on this platform.  If so we need to
5882 # build and install client programs, sbin programs and shared libraries
5883
5884 AC_MSG_CHECKING(whether to build winbind)
5885
5886 # Initially, the value of $host_os decides whether winbind is supported
5887
5888 HAVE_WINBIND=yes
5889
5890 # Define the winbind shared library name and any specific linker flags
5891 # it needs to be built with.
5892
5893 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
5894 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
5895 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5896 NSSSONAMEVERSIONSUFFIX=""
5897
5898 SMB_KRB5_LOCATOR="bin/smb_krb5_locator.$SHLIBEXT"
5899
5900 case "$host_os" in
5901         linux*-gnu* | gnu* | k*bsd*-gnu)
5902                 NSSSONAMEVERSIONSUFFIX=".2"
5903                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
5904                 ;;
5905         freebsd5*|*freebsd[[6-9]]*)
5906                 # FreeBSD winbind client is implemented as a wrapper around
5907                 # the Linux version.
5908                 NSSSONAMEVERSIONSUFFIX=".1"
5909                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
5910                     nsswitch/winbind_nss_linux.o"
5911                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5912                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5913                 ;;
5914
5915         *netbsd*[[3-9]]*)
5916                 # NetBSD winbind client is implemented as a wrapper
5917                 # around the Linux version. It needs getpwent_r() to
5918                 # indicate libc's use of the correct nsdispatch API.
5919                 #
5920                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5921                         WINBIND_NSS_EXTRA_OBJS="\
5922                             nsswitch/winbind_nss_netbsd.o \
5923                             nsswitch/winbind_nss_linux.o"
5924                         WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5925                         WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5926                 else
5927                         HAVE_WINBIND=no
5928                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5929                 fi
5930                 ;;
5931         *irix*)
5932                 # IRIX has differently named shared libraries
5933                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
5934                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
5935                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
5936                 ;;
5937         *solaris*)
5938                 # Solaris winbind client is implemented as a wrapper around
5939                 # the Linux version.
5940                 NSSSONAMEVERSIONSUFFIX=".1"
5941                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
5942                     nsswitch/winbind_nss_linux.o"
5943                 WINBIND_NSS_EXTRA_LIBS="-lsocket"
5944                 ;;
5945         *hpux11*)
5946                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
5947                 ;;
5948         *aix*)
5949                 # AIX has even differently named shared libraries.  No
5950                 # WINS support has been implemented yet.
5951                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
5952                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5953                 WINBIND_NSS="nsswitch/WINBIND"
5954                 WINBIND_WINS_NSS=""
5955                 ;;
5956         *)
5957                 HAVE_WINBIND=no
5958                 winbind_no_reason=", unsupported on $host_os"
5959                 ;;
5960 esac
5961
5962 AC_SUBST(WINBIND_NSS)
5963 AC_SUBST(WINBIND_WINS_NSS)
5964 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
5965 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
5966 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
5967 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
5968
5969 AC_SUBST(SMB_KRB5_LOCATOR)
5970
5971 # Check the setting of --with-winbind
5972
5973 AC_ARG_WITH(winbind,
5974 [  --with-winbind          Build winbind (default, if supported by OS)],
5975 [
5976   case "$withval" in
5977         yes)
5978                 HAVE_WINBIND=yes
5979                 ;;
5980         no)
5981                 HAVE_WINBIND=no
5982                 winbind_reason=""
5983                 ;;
5984   esac ],
5985 )
5986
5987 # We need unix domain sockets for winbind
5988
5989 if test x"$HAVE_WINBIND" = x"yes"; then
5990         if test x"$samba_cv_unixsocket" = x"no"; then
5991                 winbind_no_reason=", no unix domain socket support on $host_os"
5992                 HAVE_WINBIND=no
5993         fi
5994 fi
5995
5996 # Display test results
5997
5998 if test x"$HAVE_WINBIND" = x"no"; then
5999         WINBIND_NSS=""
6000         WINBIND_WINS_NSS=""
6001 fi
6002
6003 if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes"; then
6004         NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6005 fi
6006
6007 if test x"$HAVE_WINBIND" = x"yes"; then
6008         AC_MSG_RESULT(yes)
6009         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6010
6011         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6012         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6013         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6014                 PAM_MODULES="$PAM_MODULES pam_winbind"
6015                 INSTALL_PAM_MODULES="installpammodules"
6016                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6017         fi
6018 else
6019         AC_MSG_RESULT(no$winbind_no_reason)
6020 fi
6021
6022 # Solaris 10 does have new member in nss_XbyY_key
6023 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6024                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6025                 [#include <nss_dbdefs.h>])
6026
6027 # Solaris has some extra fields in struct passwd that need to be
6028 # initialised otherwise nscd crashes.
6029
6030 AC_CHECK_MEMBER(struct passwd.pw_comment,
6031                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6032                 [#include <pwd.h>])
6033
6034 AC_CHECK_MEMBER(struct passwd.pw_age,
6035                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6036                 [#include <pwd.h>])
6037
6038 # AIX 4.3.x and 5.1 do not have as many members in
6039 # struct secmethod_table as AIX 5.2
6040 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6041        [#include <usersec.h>])
6042 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6043        [#include <usersec.h>])
6044
6045 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6046 AC_TRY_COMPILE([#include <sys/types.h>
6047 #include <sys/socket.h>],
6048 [struct ucred cred;
6049  socklen_t cred_len;
6050  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6051 ],
6052 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6053 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6054     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6055 fi
6056
6057 #################################################
6058 # Check to see if we should use the included popt
6059
6060 AC_ARG_WITH(included-popt,
6061 [  --with-included-popt    use bundled popt library, not from system],
6062 [
6063   case "$withval" in
6064         yes)
6065                 INCLUDED_POPT=yes
6066                 ;;
6067         no)
6068                 INCLUDED_POPT=no
6069                 ;;
6070   esac ],
6071 )
6072 if test x"$INCLUDED_POPT" != x"yes"; then
6073     AC_CHECK_LIB(popt, poptGetContext,
6074                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6075 fi
6076
6077 AC_MSG_CHECKING(whether to use included popt)
6078 if test x"$INCLUDED_POPT" = x"yes"; then
6079     AC_MSG_RESULT(yes)
6080     BUILD_POPT='$(POPT_OBJ)'
6081     POPTLIBS='$(POPT_OBJ)'
6082     FLAGS1="-I\$(srcdir)/popt"
6083 else
6084     AC_MSG_RESULT(no)
6085     BUILD_POPT=""
6086     POPTLIBS="-lpopt"
6087 fi
6088 AC_SUBST(BUILD_POPT)
6089 AC_SUBST(POPTLIBS)
6090 AC_SUBST(FLAGS1)
6091
6092 #################################################
6093 # Check to see if we should use the included iniparser
6094
6095 AC_ARG_WITH(included-iniparser,
6096 [  --with-included-iniparser    use bundled iniparser library, not from system],
6097 [
6098   case "$withval" in
6099         yes)
6100                 INCLUDED_INIPARSER=yes
6101                 ;;
6102         no)
6103                 INCLUDED_INIPARSER=no
6104                 ;;
6105   esac ],
6106 )
6107 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6108     AC_CHECK_LIB(iniparser, iniparser_load,
6109                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6110 fi
6111
6112 AC_MSG_CHECKING(whether to use included iniparser)
6113 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6114     AC_MSG_RESULT(yes)
6115     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6116         INIPARSERLIBS=""
6117     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
6118 else
6119     AC_MSG_RESULT(no)
6120         BUILD_INIPARSER=""
6121     INIPARSERLIBS="-liniparser"
6122 fi
6123 AC_SUBST(BUILD_INIPARSER)
6124 AC_SUBST(INIPARSERLIBS)
6125 AC_SUBST(FLAGS1)
6126
6127
6128
6129 #################################################
6130 # Check if the user wants Python
6131
6132 # At the moment, you can use this to set which Python binary to link
6133 # against.  (Libraries built for Python2.2 can't be used by 2.1,
6134 # though they can coexist in different directories.)  In the future
6135 # this might make the Python stuff be built by default.
6136
6137 # Defaulting python breaks the clean target if python isn't installed
6138
6139 PYTHON=
6140
6141 AC_ARG_WITH(python,
6142 [  --with-python=PYTHONNAME  build Python libraries],
6143 [ case "${withval-python}" in
6144   yes)
6145         PYTHON=python
6146         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS python_ext"
6147         ;;
6148   no)
6149         PYTHON=
6150         ;;
6151   *)
6152         PYTHON=${withval-python}
6153         ;;
6154   esac ])
6155 AC_SUBST(PYTHON)
6156
6157 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6158 do
6159         eval MODULE_DEFAULT_$i=STATIC
6160 done
6161
6162 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6163 do
6164         dnl Fall back to static if we cannot build shared libraries
6165         eval MODULE_DEFAULT_$i=STATIC
6166
6167         if test $BLDSHARED = true; then
6168                 eval MODULE_DEFAULT_$i=SHARED
6169         fi
6170 done
6171
6172 dnl Always built these modules static
6173 MODULE_rpc_spoolss=STATIC
6174 MODULE_rpc_srvsvc=STATIC
6175 MODULE_idmap_tdb=STATIC
6176 MODULE_idmap_passdb=STATIC
6177 MODULE_idmap_nss=STATIC
6178
6179 MODULE_nss_info_template=STATIC
6180
6181 AC_ARG_WITH(static-modules,
6182 [  --with-static-modules=MODULES  Comma-separated list of names of modules to statically link in],
6183 [ if test $withval; then
6184         for i in `echo $withval | sed -e 's/,/ /g'`
6185         do
6186                 eval MODULE_$i=STATIC
6187         done
6188 fi ])
6189
6190 AC_ARG_WITH(shared-modules,
6191 [  --with-shared-modules=MODULES  Comma-separated list of names of modules to build shared],
6192 [ if test $withval; then
6193         for i in `echo $withval | sed -e 's/,/ /g'`
6194         do
6195                         eval MODULE_$i=SHARED
6196         done
6197 fi ])
6198
6199 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
6200                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6201 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6202 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6203 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6204
6205
6206 SMB_MODULE(rpc_lsa, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
6207 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
6208 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
6209 SMB_MODULE(rpc_lsa_ds, \$(RPC_LSA_DS_OBJ), "bin/librpc_lsa_ds.$SHLIBEXT", RPC)
6210 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6211 SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC)
6212 SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC)
6213 SMB_MODULE(rpc_net, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6214 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6215 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_srvsvc.$SHLIBEXT", RPC)
6216 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6217 SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC)
6218 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6219 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_echo.$SHLIBEXT", RPC)
6220 SMB_MODULE(rpc_unixinfo, \$(RPC_UNIXINFO_OBJ), "bin/librpc_unixinfo.$SHLIBEXT", RPC)
6221 SMB_MODULE(rpc_epmapper, \$(RPC_EPMAPPER_OBJ), "bin/librpc_epmapper.$SHLIBEXT", RPC)
6222 SMB_SUBSYSTEM(RPC,smbd/server.o)
6223
6224 SMB_MODULE(idmap_ldap, nsswitch/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6225 SMB_MODULE(idmap_tdb, nsswitch/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6226 SMB_MODULE(idmap_passdb, nsswitch/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6227 SMB_MODULE(idmap_nss, nsswitch/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6228 SMB_MODULE(idmap_rid, nsswitch/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6229 SMB_MODULE(idmap_ad, nsswitch/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6230 SMB_SUBSYSTEM(IDMAP, nsswitch/idmap.o)
6231
6232 SMB_MODULE(nss_info_template, nsswitch/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6233 SMB_SUBSYSTEM(NSS_INFO, nsswitch/nss_info.o)
6234
6235 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6236 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6237 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6238 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6239 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6240
6241 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6242 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6243 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6244 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6245 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6246 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6247 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6248 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6249
6250 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6251 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6252 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6253 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6254 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6255 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6256 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6257 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6258 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6259 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6260 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6261 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6262 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6263 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6264 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6265 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6266 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6267 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6268 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6269 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6270 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6271 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6272 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6273 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6274 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6275 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6276 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6277
6278 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6279
6280 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6281
6282 #################################################
6283 # do extra things if we are running insure
6284
6285 if test "${ac_cv_prog_CC}" = "insure"; then
6286         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6287 fi
6288
6289 #################################################
6290 # If run from the build farm, enable NASTY hacks
6291 #################################################
6292 AC_MSG_CHECKING(whether to enable build farm hacks)
6293 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6294         AC_MSG_RESULT(yes)
6295         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6296 else
6297         AC_MSG_RESULT(no)
6298 fi
6299
6300 #################################################
6301 # check for bad librt/libpthread interactions
6302
6303 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6304     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6305     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6306     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6307
6308 SMB_IF_RTSIGNAL_BUG(
6309         [
6310             # Have RT_SIGNAL bug, need to check whether the problem will
6311             # affect anything we have configured.
6312
6313             rt_do_error=no
6314             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6315                 if test x"$rt_signal_lease_ok" = x"no" ; then
6316                     rt_do_error=yes
6317                 fi
6318             fi
6319
6320             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6321                 if test x"$rt_signal_notify_ok" = x"no" ; then
6322                     rt_do_error=yes
6323                 fi
6324             fi
6325
6326             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6327                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6328                 if test x"$rt_signal_aio_ok" = x"no" ; then
6329                     rt_do_error=yes
6330                 fi
6331             fi
6332
6333             if test x"$rt_do_error" = x"yes" ; then
6334                 SMB_IS_LIBPTHREAD_LINKED(
6335                     [
6336                         cat<<MSG
6337
6338 *** On this platforms, linking Samba against pthreads causes problems
6339 *** with the oplock and change notification mechanisms. You may be
6340 *** using pthreads as a side-effect of using the --with-aio-support
6341 *** or --with-profiling-data options. Please remove these and try again.
6342
6343 MSG
6344                     ],
6345                     [
6346                         cat<<MSG
6347
6348 *** On this platform, the oplock and change notification mechanisms do not
6349 *** appear to work. Please report this problem to samba-technical@samba.org
6350 *** and attach the config.log file from this directory.
6351
6352 MSG
6353                     ])
6354                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6355             fi
6356         ],
6357         [
6358             # no RT_SIGNAL bug, we are golden
6359             SMB_IS_LIBPTHREAD_LINKED(
6360                 [
6361                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6362                 ])
6363
6364         ],
6365         [
6366             # cross compiling, I hope you know what you are doing
6367             true
6368         ])
6369
6370 fi
6371
6372 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6373 LIB_REMOVE_USR_LIB(LDFLAGS)
6374 LIB_REMOVE_USR_LIB(LIBS)
6375 LIB_REMOVE_USR_LIB(KRB5_LIBS)
6376
6377 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6378 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6379 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6380
6381 #################################################
6382 # Display summary of libraries detected
6383
6384 AC_MSG_RESULT([Using libraries:])
6385 AC_MSG_RESULT([    LIBS = $LIBS])
6386 if test x"$with_ads_support" != x"no"; then
6387     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6388 fi
6389 if test x"$with_ldap_support" != x"no"; then
6390     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6391 fi
6392 if test x"$with_dnsupdate_support" != x"no"; then
6393     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6394 fi
6395 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6396
6397 #################################################
6398 # final configure stuff
6399
6400 AC_MSG_CHECKING([configure summary])
6401 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
6402            AC_MSG_RESULT(yes),
6403            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6404            AC_MSG_WARN([cannot run when cross-compiling]))
6405
6406 dnl Merge in developer cflags from now on
6407 if test x"$developer" = x"yes"; then
6408     CFLAGS="${CFLAGS} ${DEVELOPER_CFLAGS}"
6409 fi
6410
6411 builddir=`pwd`
6412 AC_SUBST(builddir)
6413
6414 # Stuff the smbd-only libraries at the end of the smbd link
6415 # path (if we have them).
6416 SMBD_LIBS="$samba_dmapi_libs"
6417 AC_SUBST(SMBD_LIBS)
6418
6419 AC_OUTPUT(include/stamp-h Makefile script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh)
6420
6421 #################################################
6422 # Print very concise instructions on building/use
6423 if test "x$enable_dmalloc" = xyes
6424 then
6425         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6426         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
6427 fi