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