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