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