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