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