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