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