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