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